@sapudex/web-components 2.19.0 → 2.20.1

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 (138) hide show
  1. package/cypress/specs/AccordionItem.cy.tsx +6 -2
  2. package/cypress/specs/Footer.cy.tsx +2 -1
  3. package/dist/Accordion.d.ts +1 -0
  4. package/dist/Accordion.js +7 -1
  5. package/dist/Accordion.js.map +1 -1
  6. package/dist/AccordionItem.d.ts +8 -0
  7. package/dist/AccordionItem.js +11 -0
  8. package/dist/AccordionItem.js.map +1 -1
  9. package/dist/AccordionItemTemplate.js +2 -2
  10. package/dist/AccordionItemTemplate.js.map +1 -1
  11. package/dist/AccordionTemplate.js +2 -2
  12. package/dist/AccordionTemplate.js.map +1 -1
  13. package/dist/Carousel.d.ts +29 -2
  14. package/dist/Carousel.js +34 -6
  15. package/dist/Carousel.js.map +1 -1
  16. package/dist/CarouselTemplate.js +2 -2
  17. package/dist/CarouselTemplate.js.map +1 -1
  18. package/dist/DatePicker.d.ts +4 -4
  19. package/dist/DatePicker.js +3 -10
  20. package/dist/DatePicker.js.map +1 -1
  21. package/dist/DatePickerPopoverTemplate.d.ts +2 -0
  22. package/dist/DatePickerPopoverTemplate.js +13 -0
  23. package/dist/DatePickerPopoverTemplate.js.map +1 -0
  24. package/dist/DatePickerTemplate.d.ts +2 -0
  25. package/dist/DatePickerTemplate.js +7 -0
  26. package/dist/DatePickerTemplate.js.map +1 -0
  27. package/dist/MediaPlayerTemplate.js +2 -2
  28. package/dist/MediaPlayerTemplate.js.map +1 -1
  29. package/dist/MessageStripTemplate.js +3 -1
  30. package/dist/MessageStripTemplate.js.map +1 -1
  31. package/dist/RatingBarTemplate.js +1 -1
  32. package/dist/RatingBarTemplate.js.map +1 -1
  33. package/dist/Review.js +3 -6
  34. package/dist/Review.js.map +1 -1
  35. package/dist/ReviewItem.d.ts +1 -1
  36. package/dist/ReviewItem.js +15 -18
  37. package/dist/ReviewItem.js.map +1 -1
  38. package/dist/ReviewItemTemplate.d.ts +2 -0
  39. package/dist/ReviewItemTemplate.js +10 -0
  40. package/dist/ReviewItemTemplate.js.map +1 -0
  41. package/dist/ReviewTemplate.d.ts +2 -0
  42. package/dist/ReviewTemplate.js +9 -0
  43. package/dist/ReviewTemplate.js.map +1 -0
  44. package/dist/TileTemplate.js +1 -1
  45. package/dist/TileTemplate.js.map +1 -1
  46. package/dist/assets/{InputSuggestions-EAcC3wZN.js → InputSuggestions-yR1p8cXL.js} +2 -2
  47. package/dist/assets/{ListItemStandardExpandableTextTemplate-Bb5Y2JOR.js → ListItemStandardExpandableTextTemplate-BovnAV24.js} +3 -3
  48. package/dist/assets/{bundle.esm-BXDoCHfu.js → bundle.esm-C7AybWk0.js} +207 -207
  49. package/dist/assets/parameters-bundle.css-195ykfle.js +2 -0
  50. package/dist/assets/parameters-bundle.css-2XlTf-8J.js +2 -0
  51. package/dist/assets/parameters-bundle.css-7-HTnP5E.js +2 -0
  52. package/dist/assets/parameters-bundle.css-B7OzyC0l.js +2 -0
  53. package/dist/assets/parameters-bundle.css-BJjePPyo.js +2 -0
  54. package/dist/assets/parameters-bundle.css-BVsx_KaG.js +2 -0
  55. package/dist/assets/parameters-bundle.css-BbOftqiJ.js +2 -0
  56. package/dist/assets/parameters-bundle.css-BpraBfJY.js +2 -0
  57. package/dist/assets/parameters-bundle.css-Btm09-js.js +2 -0
  58. package/dist/assets/parameters-bundle.css-BtvY__7H.js +2 -0
  59. package/dist/assets/parameters-bundle.css-CAs_WpVc.js +2 -0
  60. package/dist/assets/parameters-bundle.css-Cqg5HiU_.js +2 -0
  61. package/dist/assets/parameters-bundle.css-DIUy2Etb.js +2 -0
  62. package/dist/assets/parameters-bundle.css-Dn173v0e.js +2 -0
  63. package/dist/assets/parameters-bundle.css-QEiUG73s.js +2 -0
  64. package/dist/assets/parameters-bundle.css-VUmjvCcs.js +2 -0
  65. package/dist/css/themes/Quote.css +1 -1
  66. package/dist/css/themes/RatingIndicator.css +1 -1
  67. package/dist/css/themes/Slider.css +1 -1
  68. package/dist/custom-elements-internal.json +218 -146
  69. package/dist/custom-elements.json +202 -131
  70. package/dist/generated/themes/Quote.css.d.ts +1 -1
  71. package/dist/generated/themes/Quote.css.js +1 -1
  72. package/dist/generated/themes/Quote.css.js.map +1 -1
  73. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  74. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  75. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  76. package/dist/generated/themes/Slider.css.d.ts +1 -1
  77. package/dist/generated/themes/Slider.css.js +1 -1
  78. package/dist/generated/themes/Slider.css.js.map +1 -1
  79. package/dist/vscode.html-custom-data.json +24 -5
  80. package/dist/web-types.json +41 -5
  81. package/package.json +8 -8
  82. package/src/Accordion.ts +9 -1
  83. package/src/AccordionItem.ts +10 -0
  84. package/src/AccordionItemTemplate.tsx +2 -2
  85. package/src/AccordionTemplate.tsx +3 -2
  86. package/src/Carousel.ts +36 -6
  87. package/src/CarouselTemplate.tsx +4 -0
  88. package/src/DatePicker.ts +7 -11
  89. package/src/DatePickerPopoverTemplate.tsx +35 -0
  90. package/src/DatePickerTemplate.tsx +27 -0
  91. package/src/MediaPlayerTemplate.tsx +20 -19
  92. package/src/MessageStripTemplate.tsx +4 -2
  93. package/src/RatingBarTemplate.tsx +1 -0
  94. package/src/Review.ts +3 -6
  95. package/src/ReviewItem.ts +15 -19
  96. package/src/ReviewItemTemplate.tsx +49 -0
  97. package/src/ReviewTemplate.tsx +69 -0
  98. package/src/TileTemplate.tsx +1 -0
  99. package/src/generated/themes/Quote.css.ts +1 -1
  100. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  101. package/src/generated/themes/Slider.css.ts +1 -1
  102. package/src/themes/Quote.css +7 -2
  103. package/dist/assets/parameters-bundle.css-7tmaWxIc.js +0 -2
  104. package/dist/assets/parameters-bundle.css-BERBdAGd.js +0 -2
  105. package/dist/assets/parameters-bundle.css-B_2Jldx4.js +0 -2
  106. package/dist/assets/parameters-bundle.css-BbhFHnRW.js +0 -2
  107. package/dist/assets/parameters-bundle.css-Bg4Huwh4.js +0 -2
  108. package/dist/assets/parameters-bundle.css-BwKgmVCr.js +0 -2
  109. package/dist/assets/parameters-bundle.css-C759-AfS.js +0 -2
  110. package/dist/assets/parameters-bundle.css-CCDcKh9J.js +0 -2
  111. package/dist/assets/parameters-bundle.css-COmXsTqR.js +0 -2
  112. package/dist/assets/parameters-bundle.css-CPZYPVEO.js +0 -2
  113. package/dist/assets/parameters-bundle.css-C_z8R1zV.js +0 -2
  114. package/dist/assets/parameters-bundle.css-CuV0KqCS.js +0 -2
  115. package/dist/assets/parameters-bundle.css-DT8OC7CO.js +0 -2
  116. package/dist/assets/parameters-bundle.css-Df2zY3XY.js +0 -2
  117. package/dist/assets/parameters-bundle.css-H0NCnWYS.js +0 -2
  118. package/dist/assets/parameters-bundle.css-pC6uofhy.js +0 -2
  119. package/dist/generated/templates/DatePickerPopoverTemplate.lit.d.ts +0 -3
  120. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js +0 -10
  121. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js.map +0 -1
  122. package/dist/generated/templates/DatePickerTemplate.lit.d.ts +0 -3
  123. package/dist/generated/templates/DatePickerTemplate.lit.js +0 -10
  124. package/dist/generated/templates/DatePickerTemplate.lit.js.map +0 -1
  125. package/dist/generated/templates/ReviewItemTemplate.lit.d.ts +0 -3
  126. package/dist/generated/templates/ReviewItemTemplate.lit.js +0 -10
  127. package/dist/generated/templates/ReviewItemTemplate.lit.js.map +0 -1
  128. package/dist/generated/templates/ReviewTemplate.lit.d.ts +0 -3
  129. package/dist/generated/templates/ReviewTemplate.lit.js +0 -12
  130. package/dist/generated/templates/ReviewTemplate.lit.js.map +0 -1
  131. package/src/DatePicker.hbs +0 -19
  132. package/src/DatePickerPopover.hbs +0 -24
  133. package/src/Review.hbs +0 -44
  134. package/src/ReviewItem.hbs +0 -20
  135. package/src/generated/templates/DatePickerPopoverTemplate.lit.ts +0 -14
  136. package/src/generated/templates/DatePickerTemplate.lit.ts +0 -14
  137. package/src/generated/templates/ReviewItemTemplate.lit.ts +0 -14
  138. package/src/generated/templates/ReviewTemplate.lit.ts +0 -16
package/src/Carousel.ts CHANGED
@@ -11,11 +11,15 @@ import {
11
11
  import { CAROUSEL_NEXT_ARROW_TEXT, CAROUSEL_PREVIOUS_ARROW_TEXT } from "./generated/i18n/i18n-defaults.js";
12
12
  import redirectAttributes from "./utils/redirectAttributes.js";
13
13
  import type UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
14
+ import type { UI5CustomEvent } from "@ui5/webcomponents-base";
15
+ import type Icon from "@ui5/webcomponents/dist/Icon.js";
14
16
 
15
17
  import CarouselTemplate from "./CarouselTemplate.js";
16
18
 
17
19
  // Styles
18
20
  import CarouselCss from "./generated/themes/Carousel.css.js";
21
+ import type CarouselPageIndicatorType from "@ui5/webcomponents/dist/types/CarouselPageIndicatorType.js";
22
+ import type UDExButton from "./Button.js";
19
23
 
20
24
  export enum UDExCarouselNavigationPosition {
21
25
  top = "top",
@@ -76,6 +80,34 @@ class UDExCarousel extends UI5Element {
76
80
  @slot({ "default": true, type: HTMLElement, individualSlots: true })
77
81
  items!: Array<HTMLElement>;
78
82
 
83
+ /**
84
+ * Defines the number of items per page depending on the carousel width.
85
+ *
86
+ * - 'S' for screens smaller than 600 pixels.
87
+ * - 'M' for screens greater than or equal to 600 pixels and smaller than 1024 pixels.
88
+ * - 'L' for screens greater than or equal to 1024 pixels and smaller than 1440 pixels.
89
+ * - 'XL' for screens greater than or equal to 1440 pixels.
90
+ *
91
+ * One item per page is shown by default.
92
+ * @default "S1 M1 L1 XL1"
93
+ * @public
94
+ */
95
+ @property()
96
+ itemsPerPage = "S1 M1 L1 XL1";
97
+
98
+ /**
99
+ * Defines the style of the page indicator.
100
+ * Available options are:
101
+ *
102
+ * - `Default` - The page indicator will be visualized as dots if there are fewer than 9 pages. If there are more pages, the page indicator will switch to displaying the current page and the total number of pages. (e.g. X of Y)
103
+ * - `Numeric` - The page indicator will display the current page and the total number of pages. (e.g. X of Y)
104
+ * @since 1.10
105
+ * @default "Default"
106
+ * @public
107
+ */
108
+ @property()
109
+ pageIndicatorType: `${CarouselPageIndicatorType}` = "Default";
110
+
79
111
  /**
80
112
  * Defines the prev button is disabled
81
113
  *
@@ -150,23 +182,21 @@ class UDExCarousel extends UI5Element {
150
182
  this.isNextButtonDisabled = !this._carousel?.hasNext;
151
183
  }
152
184
 
153
- _prevButtonClick() {
185
+ _prevButtonClick(e: UI5CustomEvent<UDExButton, "click">) {
154
186
  if (this.isPrevButtonDisabled) {
155
187
  return;
156
188
  }
157
189
 
158
- this._carousel?.navigateLeft();
159
- this._ui5CarouselRoot?.focus();
190
+ this._carousel?._navButtonClick(e as unknown as UI5CustomEvent<Icon, "click">);
160
191
  this._calculateDisabledButtonsState();
161
192
  }
162
193
 
163
- _nextButtonClick() {
194
+ _nextButtonClick(e: UI5CustomEvent<UDExButton, "click">) {
164
195
  if (this.isNextButtonDisabled) {
165
196
  return;
166
197
  }
167
198
 
168
- this._carousel?.navigateRight();
169
- this._ui5CarouselRoot?.focus();
199
+ this._carousel?._navButtonClick(e as unknown as UI5CustomEvent<Icon, "click">);
170
200
  this._calculateDisabledButtonsState();
171
201
  }
172
202
 
@@ -12,6 +12,8 @@ export default function CarouselTemplate(this: Carousel) {
12
12
  <div className={this.carouselClass} onKeyDown={this._onkeydown}>
13
13
  {this.showNavigationButtons.top && navigation.call(this)}
14
14
  <UI5Carousel
15
+ itemsPerPage={this.itemsPerPage}
16
+ pageIndicatorType={this.pageIndicatorType}
15
17
  id="carousel"
16
18
  hideNavigationArrows
17
19
  arrowsPlacement={CarouselArrowsPlacement.Navigation}
@@ -32,6 +34,7 @@ function navigation(this: Carousel) {
32
34
  return (
33
35
  <div class="udex-carousel__navigation-wrapper" part="navigation">
34
36
  <UDExButton
37
+ data-ui5-arrow-back
35
38
  size={UDExButtonSize.Large}
36
39
  disabled={this.isPrevButtonDisabled}
37
40
  class={btnClassName}
@@ -42,6 +45,7 @@ function navigation(this: Carousel) {
42
45
  part="prev-button">
43
46
  </UDExButton>
44
47
  <UDExButton
48
+ data-ui5-arrow-forward
45
49
  size={UDExButtonSize.Large}
46
50
  disabled={this.isNextButtonDisabled}
47
51
  class={btnClassName}
package/src/DatePicker.ts CHANGED
@@ -1,23 +1,20 @@
1
1
  import DateComponentBase from "@ui5/webcomponents/dist/DateComponentBase.js";
2
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
2
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
3
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
4
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
5
5
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
6
- // eslint-disable-next-line
7
- import Calendar, { CalendarSelectionChangeEventDetail } from "@ui5/webcomponents/dist/Calendar.js";
8
- import CalendarDate from "@ui5/webcomponents/dist/CalendarDate.js";
6
+ import type { CalendarSelectionChangeEventDetail } from "@ui5/webcomponents/dist/Calendar.js";
9
7
  import "@ui5/webcomponents/dist/Icon.js";
10
8
  import "@ui5/webcomponents-icons/dist/appointment-2.js";
11
9
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
12
10
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
13
11
  import { CALENDAR_ICON, DATEPICKER_DATE_DESCRIPTION } from "./generated/i18n/i18n-defaults.js";
14
- import UDExTextField from "./TextField.js";
15
- import UDExDropdown from "./Dropdown.js";
16
- import UDExStatusMessage from "./StatusMessage.js";
12
+ import type UDExTextField from "./TextField.js";
13
+ import type UDExDropdown from "./Dropdown.js";
17
14
  import UDExValueState from "./types/common.js";
18
15
 
19
16
  // Template
20
- import DatePickerTemplate from "./generated/templates/DatePickerTemplate.lit.js";
17
+ import DatePickerTemplate from "./DatePickerTemplate.js";
21
18
 
22
19
  // Styles
23
20
  import DatePickerCss from "./generated/themes/DatePicker.css.js";
@@ -60,10 +57,9 @@ type UDExDatePickerValueStateChangeEventDetail = {
60
57
  */
61
58
  @customElement({
62
59
  tag: "udex-date-picker",
63
- renderer: litRender,
60
+ renderer: jsxRenderer,
64
61
  styles: [DatePickerCss, DatePickerPopoverCss],
65
62
  template: DatePickerTemplate,
66
- dependencies: [CalendarDate, Calendar, UDExTextField, UDExDropdown, UDExStatusMessage],
67
63
  })
68
64
  /**
69
65
  * Fired when the selected dates change.
@@ -506,7 +502,7 @@ class UDExDatePicker extends DateComponentBase {
506
502
  this._updateValueAndFireDecoratorEvents((e.target as UDExDatePicker).value, true);
507
503
  }
508
504
 
509
- handleInputClick(e: MouseEvent | KeyboardEvent): void {
505
+ handleInputClick(e: CustomEvent<void>): void {
510
506
  e.preventDefault();
511
507
 
512
508
  if (this.disabled || this.readonly) {
@@ -0,0 +1,35 @@
1
+ import Calendar from "@ui5/webcomponents/dist/Calendar.js";
2
+ import type DatePicker from "./DatePicker.js";
3
+ import UDExDropdown from "./Dropdown.js";
4
+ import { Placement } from "./types/Dropdown.js";
5
+ import CalendarDate from "@ui5/webcomponents/dist/CalendarDate.js";
6
+ import CalendarDateRange from "@ui5/webcomponents/dist/CalendarDateRange.js";
7
+
8
+ export default function DatePickerPopoverTemplate(this: DatePicker) {
9
+ return (
10
+ <UDExDropdown
11
+ id={`udex-${this._id}-calendar__popover`}
12
+ opener={`udex-${this._id}-calendar__opener`}
13
+ class="udex-date-picker__popover"
14
+ placement={Placement.Bottom}
15
+ horizontal-align="Start"
16
+ onClose={this._afterDropdownClose}
17
+ onOpen={this._afterDropdownOpen}>
18
+ <Calendar
19
+ class="udex-date-picker__calendar"
20
+ onSelectionChange={this.handleCalendarChange}
21
+ selection-mode={this.selectionMode}
22
+ min-date={this.minDate}
23
+ max-date={this.maxDate}
24
+ format-pattern={this.formatPattern}>
25
+ { this.isRangeMode ?
26
+ <CalendarDateRange start-value={this.startValue} end-value={this.endValue}></CalendarDateRange>
27
+ :
28
+ this._calendarSelectedDates.map(date =>
29
+ <CalendarDate value={date}></CalendarDate>
30
+ )
31
+ }
32
+ </Calendar>
33
+ </UDExDropdown>
34
+ );
35
+ }
@@ -0,0 +1,27 @@
1
+ import type DatePicker from "./DatePicker.js";
2
+ import DatePickerPopoverTemplate from "./DatePickerPopoverTemplate.js";
3
+ import UDExTextField from "./TextField.js";
4
+
5
+ export default function DatePickerTemplate(this: DatePicker) {
6
+ return (
7
+ <>
8
+ <UDExTextField
9
+ class="udex-date-picker__input"
10
+ _aria-has-popup="grid"
11
+ icon="appointment-2"
12
+ value={this.value}
13
+ label={this.label}
14
+ accessible-name={this.dateAccessibleName}
15
+ accessible-name-ref={this.accessibleNameRef}
16
+ accessible-icon-name={this.accessibleIconName}
17
+ {...(this.disabled ? { "disabled": true } : {})}
18
+ {...(this.required ? { "required": true } : {})}
19
+ {...(this.readonly ? { "readonly": true } : {})}
20
+ onClickIcon={this.handleInputClick}
21
+ onChange={this._onInputChange}
22
+ value-state={this.valueState}
23
+ supporting-text={this.supportingText} />
24
+ {DatePickerPopoverTemplate.call(this)}
25
+ </>
26
+ );
27
+ }
@@ -1,3 +1,5 @@
1
+ // @ts-nocheck
2
+ // No ts check required for video-js tag usage. Please remove during development.
1
3
  import type UDExMediaPlayer from "./MediaPlayer.js";
2
4
  import UDExMediaPlayerYoutube from "./MediaPlayerYoutube.js";
3
5
  import UDExMediaPlayerVimeo from "./MediaPlayerVimeo.js";
@@ -30,27 +32,26 @@ function renderAudioOnlyTemplate(this: UDExMediaPlayer, rootClass: string) {
30
32
 
31
33
  function renderStandardTemplate(this: UDExMediaPlayer, rootClass: string) {
32
34
  return (
33
- <video
35
+ <video-js
34
36
  id={this.playerElementId}
35
37
  class={`${rootClass} ${this.aspectRatioClass}`}>
36
- <source src={this.source} type={this.type}>
37
- {this._tracks.map((element: HTMLTrackElement, index: number) => {
38
- const {
39
- "default": isDefault, kind, src, srclang, label
40
- } = element;
41
- return (
42
- <track
43
- key={index}
44
- kind={kind}
45
- src={src}
46
- srclang={srclang}
47
- label={label}
48
- {...(isDefault ? { "default": true } : {})}
49
- />
50
- );
51
- })}
52
- </source>
53
- </video>
38
+ <source src={this.source} type={this.type} />
39
+ {this._tracks.map((element: HTMLTrackElement, index: number) => {
40
+ const {
41
+ "default": isDefault, kind, src, srclang, label
42
+ } = element;
43
+ return (
44
+ <track
45
+ key={index}
46
+ kind={kind}
47
+ src={src}
48
+ srclang={srclang}
49
+ label={label}
50
+ {...(isDefault ? { "default": true } : {})}
51
+ />
52
+ );
53
+ })}
54
+ </video-js>
54
55
  );
55
56
  }
56
57
 
@@ -7,6 +7,8 @@ import sysEnter2 from "@ui5/webcomponents-icons/dist/sys-enter-2.js";
7
7
  import error from "@ui5/webcomponents-icons/dist/error.js";
8
8
  import alert from "@ui5/webcomponents-icons/dist/alert.js";
9
9
  import { UDExMessageStripDesign } from "./types/MessageStrip.js";
10
+ import UDExButtonSize from "./types/ButtonSize.js";
11
+ import UDExButtonDesign from "./types/ButtonDesign.js";
10
12
 
11
13
  export default function MessageStripTemplate(this: UDExMessageStrip) {
12
14
  return (
@@ -47,9 +49,9 @@ export default function MessageStripTemplate(this: UDExMessageStrip) {
47
49
  </span>
48
50
  {!this.hideCloseButton && (
49
51
  <UDExButton
50
- size="Small"
52
+ size={UDExButtonSize.Small}
51
53
  icon={decline}
52
- design="Tertiary"
54
+ design={UDExButtonDesign.Tertiary}
53
55
  onClick={this._closeClick}
54
56
  tooltip={this._closeButtonText}
55
57
  part="close-button"
@@ -14,6 +14,7 @@ export default function RatingBarTemplate(this: RatingBar) {
14
14
  </div>
15
15
  <UI5Icon
16
16
  aria-labelledby="ratingDescription"
17
+ role="img"
17
18
  name={favorite}
18
19
  class={`${rootClass}__icon`}>
19
20
  </UI5Icon>
package/src/Review.ts CHANGED
@@ -2,16 +2,14 @@ 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";
6
- import Icon from "@ui5/webcomponents/dist/Icon.js";
5
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
7
6
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
8
7
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
8
  import { REVIEWS, STARS } from "./generated/i18n/i18n-defaults.js";
10
9
  import "@ui5/webcomponents-icons/dist/favorite.js";
11
10
  import UDExRatingBar from "./RatingBar.js";
12
- import UDExRatingIndicator from "./RatingIndicator.js";
13
11
  import type UDExButton from "./Button.js";
14
- import ReviewTemplate from "./generated/templates/ReviewTemplate.lit.js";
12
+ import ReviewTemplate from "./ReviewTemplate.js";
15
13
 
16
14
  // Styles
17
15
  import ReviewCss from "./generated/themes/Review.css.js";
@@ -35,10 +33,9 @@ import ReviewCss from "./generated/themes/Review.css.js";
35
33
  */
36
34
  @customElement({
37
35
  tag: "udex-review",
38
- renderer: litRender,
36
+ renderer: jsxRenderer,
39
37
  styles: ReviewCss,
40
38
  template: ReviewTemplate,
41
- dependencies: [UDExRatingBar, UDExRatingIndicator, Icon],
42
39
  })
43
40
 
44
41
  class UDExReview extends UI5Element {
package/src/ReviewItem.ts CHANGED
@@ -1,20 +1,17 @@
1
1
  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
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
-
4
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
6
5
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
7
6
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
8
7
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
8
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
9
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
11
- import UDExRatingIndicator from "./RatingIndicator.js";
12
- import UDExButton from "./Button.js";
13
- import ReviewItemTemplate from "./generated/templates/ReviewItemTemplate.lit.js";
10
+ import ReviewItemTemplate from "./ReviewItemTemplate.js";
11
+ import { READ_LESS, READ_MORE } from "./generated/i18n/i18n-defaults.js";
14
12
 
15
13
  // Styles
16
14
  import ReviewItemCss from "./generated/themes/ReviewItem.css.js";
17
- import { READ_LESS, READ_MORE } from "./generated/i18n/i18n-defaults.js";
18
15
 
19
16
  /**
20
17
  * @class
@@ -35,10 +32,9 @@ import { READ_LESS, READ_MORE } from "./generated/i18n/i18n-defaults.js";
35
32
  */
36
33
  @customElement({
37
34
  tag: "udex-review-item",
38
- renderer: litRender,
35
+ renderer: jsxRenderer,
39
36
  styles: ReviewItemCss,
40
37
  template: ReviewItemTemplate,
41
- dependencies: [UDExRatingIndicator, UDExButton],
42
38
  })
43
39
 
44
40
  class UDExReviewItem extends UI5Element {
@@ -129,17 +125,6 @@ class UDExReviewItem extends UI5Element {
129
125
  @i18n("@sapudex/web-components")
130
126
  static i18nBundle: I18nBundle;
131
127
 
132
- _toggleText() {
133
- this._textExpanded = !this._textExpanded;
134
- if (this._textExpanded) {
135
- this._completeText = this.text;
136
- this._textElement.classList.add("udex-review-item__text-expanded");
137
- } else {
138
- this._textElement.classList.remove("udex-review-item__text-expanded");
139
- this._completeText = this._visibleText;
140
- }
141
- }
142
-
143
128
  _handleResizeBound: ResizeObserverCallback;
144
129
  _textElement!: HTMLElement;
145
130
  _visibleText!: string;
@@ -167,6 +152,17 @@ class UDExReviewItem extends UI5Element {
167
152
  this._checkTextOverflow();
168
153
  }
169
154
 
155
+ _toggleText() {
156
+ this._textExpanded = !this._textExpanded;
157
+ if (this._textExpanded) {
158
+ this._completeText = this.text;
159
+ this._textElement.classList.add("udex-review-item__text-expanded");
160
+ } else {
161
+ this._textElement.classList.remove("udex-review-item__text-expanded");
162
+ this._completeText = this._visibleText;
163
+ }
164
+ }
165
+
170
166
  _checkTextOverflow() {
171
167
  const words = this.text.split(" ");
172
168
 
@@ -0,0 +1,49 @@
1
+ import type ReviewItem from "./ReviewItem.js";
2
+ import UDExRatingIndicator from "./RatingIndicator.js";
3
+ import UDExButton from "./Button.js";
4
+ import UDExButtonSize from "./types/ButtonSize.js";
5
+ import UDExButtonDesign from "./types/ButtonDesign.js";
6
+
7
+ export default function ReviewItemTemplate(this: ReviewItem) {
8
+ const rootClass = "udex-review-item";
9
+
10
+ return (
11
+ <div className={this.reviewItemClasses}>
12
+ <div className={`${rootClass}__rating-container`}>
13
+ <UDExRatingIndicator
14
+ value={this.validatedRating}
15
+ max={this._maxRating}
16
+ readonly>
17
+ </UDExRatingIndicator>
18
+ {this.date && (
19
+ <slot
20
+ className={`${rootClass}__date`}
21
+ slot="date"
22
+ name="date">
23
+ </slot>
24
+ )}
25
+ </div>
26
+ <div className={`${rootClass}__text-container`}>
27
+ <div className={`${rootClass}__title`}>{this.reviewTitle}</div>
28
+ <div className={`${rootClass}__text-wrapper`}>
29
+ <p className={`${rootClass}__text`} id={`${rootClass}__text`}>
30
+ {this._completeText}
31
+ </p>
32
+ {this._showTextExpander && (
33
+ <UDExButton
34
+ id="reviewExpander"
35
+ class={`${rootClass}__text-expander`}
36
+ design={UDExButtonDesign.Invisible}
37
+ size={UDExButtonSize.Large}
38
+ onClick={this._toggleText.bind(this)}>
39
+ {this.buttonText}
40
+ </UDExButton>
41
+ )}
42
+ </div>
43
+ {this.author && (
44
+ <slot slot="author" name="author" className={`${rootClass}__author`}></slot>
45
+ )}
46
+ </div>
47
+ </div>
48
+ );
49
+ }
@@ -0,0 +1,69 @@
1
+ import type Review from "./Review.js";
2
+ import UDExRatingIndicator from "./RatingIndicator.js";
3
+ import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
4
+ import favorite from "@ui5/webcomponents-icons/dist/favorite.js";
5
+
6
+ export default function ReviewTemplate(this: Review) {
7
+ const rootClass = "udex-review";
8
+
9
+ return (
10
+ this.isEmpty ? (
11
+ <div className={`${rootClass}__empty-container`}>
12
+ <slot className={`${rootClass}__default-text`} name="defaultText"></slot>
13
+ <slot name="reviewButton"></slot>
14
+ </div>
15
+ ) : this.withoutBreakdown ? (
16
+ <div className={`${rootClass}__container-without-breakdown`}>
17
+ <div className={`${rootClass}__content-without-breakdown`}>
18
+ <div
19
+ className={`${rootClass}__rating`}
20
+ aria-level={2}
21
+ role="heading"
22
+ aria-hidden="true">
23
+ {this.validatedRating}
24
+ </div>
25
+ <div className={`${rootClass}__rating-info-without-breakdown`}>
26
+ <UDExRatingIndicator
27
+ value={this.validatedRating}
28
+ max={this._maxRating}
29
+ readonly>
30
+ </UDExRatingIndicator>
31
+ <div className={`${rootClass}__reviews-text`}>{this.reviewsText}</div>
32
+ </div>
33
+ </div>
34
+ <div className={`${rootClass}__additional-content-without-breakdown`}>
35
+ <slot className={`${rootClass}__default-text`} name="defaultText"></slot>
36
+ <slot name="reviewButton"></slot>
37
+ </div>
38
+ </div>
39
+ ) : (
40
+ <div className={`${rootClass}__container`}>
41
+ <div className={`${rootClass}__content`}>
42
+ <div className={`${rootClass}__rating-info`}>
43
+ <div
44
+ className={`${rootClass}__rating`}
45
+ aria-level={2}
46
+ role="heading"
47
+ aria-hidden="true">
48
+ {this.validatedRating}
49
+ </div>
50
+ <UI5Icon
51
+ aria-labelledby="ratingDescription"
52
+ role="img"
53
+ name={favorite}
54
+ class={`${rootClass}__icon`}>
55
+ </UI5Icon>
56
+ </div>
57
+ <div className={`${rootClass}__reviews-text`}>{this.reviewsText}</div>
58
+ <slot name="reviewButton"></slot>
59
+ </div>
60
+ <div className={`${rootClass}__additional-content`}>
61
+ {this.validatedRatingBars.map(bar => (
62
+ <slot name={bar._individualSlot}></slot>
63
+ ))}
64
+ </div>
65
+ <span id="ratingDescription" class="hidden-text">{this._ratingDescription}</span>
66
+ </div>
67
+ )
68
+ );
69
+ }
@@ -10,6 +10,7 @@ export default function TileTemplate(this: Tile) {
10
10
  <a
11
11
  className={rootClass}
12
12
  part={part}
13
+ tabindex={0}
13
14
  href={this.href}
14
15
  target={this.target}
15
16
  role="link"
@@ -5,5 +5,5 @@ import defaultTheme from "./sap_horizon/parameters-bundle.css.js";
5
5
 
6
6
  registerThemePropertiesLoader("@" + "ui5" + "/" + "webcomponents-theming", "sap_horizon", async () => defaultThemeBase);
7
7
  registerThemePropertiesLoader("@" + "s" + "a" + "p" + "u" + "d" + "e" + "x" + "/" + "w" + "e" + "b" + "-" + "c" + "o" + "m" + "p" + "o" + "n" + "e" + "n" + "t" + "s", "sap_horizon", async () => defaultTheme);
8
- export default `:host{display:block;width:100%;container-type:inline-size}.udex-quote__container{display:flex;flex-direction:row;width:100%;text-align:left;gap:var(--udexSpacer24)}.udex-quote__container:dir(rtl){text-align:right}:host([image-size="small"]) .udex-quote__container,:host([text-size="small"]) .udex-quote__container{gap:var(--udexSpacer16)}.udex-quote__text,::slotted([slot="author"]),::slotted([slot="link"]){padding:0 50px}::slotted([slot="image"]){display:block;width:120px;height:120px}:host([mask="rectangle"]) ::slotted([slot="image"]){display:block;width:200px;height:100px;background-color:transparent;object-fit:contain}:host([image-size="small"]) ::slotted([slot="image"]){width:var(--udexSpacer64);height:var(--udexSpacer64)}:host([image-size="small"][mask="rectangle"]) ::slotted([slot="image"]){width:160px;height:80px}.udex-quote__text-container{position:relative;margin:0}.udex-quote__text{margin:0 0 var(--udexSpacer24);font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyBodyXLFontSize, 24px);line-height:var(--udexTypographyBodyLineHeight, 1.5);color:var(--udexColorGrey8, #354A5F)}.udex-quote__text ::slotted(*){margin:0}.udex-quote__text-container:before,.udex-quote__text-container:after{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightMedium, 500);text-align:center;position:absolute;display:inline-block;font-size:84px;line-height:84px;height:58px;width:34px;color:var(--udexColorGrey8, #354A5F);margin-top:-9px}.udex-quote__text-container:before{content:open-quote;top:0;left:0}.udex-quote__text-container:after{content:close-quote;top:0;right:0}:host([text-size="small"]) .udex-quote__text-container:after,:host([text-size="small"]) .udex-quote__text-container:before{font-size:72px;line-height:72px;font-weight:var(--udexTypographyFontWeightRegular, 400);height:50px;width:26px;margin-top:-12px}::slotted([slot="author"]){display:block;margin-bottom:var(--udexSpacer24);font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyHeadingRegularXXSFontSize, 20px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);color:var(--udexColorGrey8, #354A5F)}:host([text-size="small"]) .udex-quote__text{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyBodySFontSize, 16px);line-height:var(--udexTypographyBodyLineHeight, 1.5);padding-inline:34px}:host([text-size="small"]) ::slotted([slot="author"]){font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);padding-inline:34px}:host([text-size="small"]) ::slotted([slot="link"]){padding-inline:34px}@media screen and (max-width: 1279px){.udex-quote__container{gap:var(--udexSpacer16)}::slotted([slot="author"]){font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);padding:0 34px}::slotted([slot="link"]){padding:0 34px}::slotted([slot="image"]){width:var(--udexSpacer64);height:var(--udexSpacer64)}:host([mask="rectangle"]) ::slotted([slot="image"]){width:160px;height:80px}.udex-quote__text-container:after,.udex-quote__text-container:before{font-size:72px;font-weight:var(--udexTypographyFontWeightRegular, 400);line-height:72px;height:50px;width:26px}.udex-quote__text{font-size:var(--udexTypographyBodySFontSize, 16px);line-height:var(--udexTypographyBodyLineHeight, 1.5);padding:0 34px}}@media (max-width: 639px){.udex-quote__container,:host([image-placement="right"]) .udex-quote__container{flex-direction:column;gap:var(--udexSpacer16)}::slotted([slot="image"]){margin:0 auto}}
8
+ export default `:host{display:block;width:100%;container-type:inline-size}.udex-quote__container{display:flex;flex-direction:row;width:100%;text-align:left;gap:var(--udexSpacer24)}.udex-quote__container:dir(rtl){text-align:right}:host([image-size="small"]) .udex-quote__container,:host([text-size="small"]) .udex-quote__container{gap:var(--udexSpacer16)}.udex-quote__text,::slotted([slot="author"]),::slotted([slot="link"]){padding:0 50px}::slotted([slot="image"]){display:block;width:120px;height:120px}:host([mask="rectangle"]) ::slotted([slot="image"]){display:block;width:200px;height:100px;background-color:transparent;object-fit:contain}:host([image-size="small"]) ::slotted([slot="image"]){width:var(--udexSpacer64);height:var(--udexSpacer64)}:host([image-size="small"][mask="rectangle"]) ::slotted([slot="image"]){width:160px;height:80px}.udex-quote__text-container{quotes:"\\201c""\\201d";position:relative;margin:0}.udex-quote__text{margin:0 0 var(--udexSpacer24);font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyBodyXLFontSize, 24px);line-height:var(--udexTypographyBodyLineHeight, 1.5);color:var(--udexColorGrey8, #354A5F)}.udex-quote__text ::slotted(*){margin:0}.udex-quote__text-container:before,.udex-quote__text-container:after{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightMedium, 500);text-align:center;position:absolute;display:inline-block;font-size:84px;line-height:84px;height:58px;width:34px;color:var(--udexColorGrey8, #354A5F);margin-top:-9px}.udex-quote__text-container:before{content:open-quote;top:0;left:0}.udex-quote__text-container:after{content:close-quote;top:0;right:0}:host([text-size="small"]) .udex-quote__text-container:after,:host([text-size="small"]) .udex-quote__text-container:before{font-size:72px;line-height:72px;font-weight:var(--udexTypographyFontWeightRegular, 400);height:50px;width:26px;margin-top:-12px}::slotted([slot="author"]){display:block;margin-bottom:var(--udexSpacer24);font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyHeadingRegularXXSFontSize, 20px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);color:var(--udexColorGrey8, #354A5F)}:host([text-size="small"]) .udex-quote__text{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyBodySFontSize, 16px);line-height:var(--udexTypographyBodyLineHeight, 1.5);padding-inline:34px}:host([text-size="small"]) ::slotted([slot="author"]){font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);padding-inline:34px}:host([text-size="small"]) ::slotted([slot="link"]){padding-inline:34px}@media screen and (max-width: 1279px){.udex-quote__container{gap:var(--udexSpacer16)}::slotted([slot="author"]){font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);padding:0 34px}::slotted([slot="link"]){padding:0 34px}::slotted([slot="image"]){width:var(--udexSpacer64);height:var(--udexSpacer64)}:host([mask="rectangle"]) ::slotted([slot="image"]){width:160px;height:80px}.udex-quote__text-container:after,.udex-quote__text-container:before{font-size:72px;font-weight:var(--udexTypographyFontWeightRegular, 400);line-height:72px;height:50px;width:26px}.udex-quote__text{font-size:var(--udexTypographyBodySFontSize, 16px);line-height:var(--udexTypographyBodyLineHeight, 1.5);padding:0 34px}}@media (max-width: 639px){.udex-quote__container{flex-direction:column;gap:var(--udexSpacer16)}:host([image-placement="right"]) .udex-quote__container{flex-direction:column-reverse;gap:var(--udexSpacer16)}::slotted([slot="image"]){margin:0 auto}}
9
9
  `
@@ -5,5 +5,5 @@ import defaultTheme from "./sap_horizon/parameters-bundle.css.js";
5
5
 
6
6
  registerThemePropertiesLoader("@" + "ui5" + "/" + "webcomponents-theming", "sap_horizon", async () => defaultThemeBase);
7
7
  registerThemePropertiesLoader("@" + "s" + "a" + "p" + "u" + "d" + "e" + "x" + "/" + "w" + "e" + "b" + "-" + "c" + "o" + "m" + "p" + "o" + "n" + "e" + "n" + "t" + "s", "sap_horizon", async () => defaultTheme);
8
- export default `:host{--udex_rating_indicator_readonly_item_width: 1.5rem;--udex_rating_indicator_readonly_item_height: 1.5rem;--udex_rating_indicator_item_width: 1.5rem;--udex_rating_indicator_item_height: 1.5rem;--udex_rating_indicator_mobile_item_padding: 10px;--udex_rating_indicator_disabled_opacity: .4;--udex-rating_indicator_items_gap: 8px;--udex-rating_indicator_mobile_items_gap: 8px;--udex-rating_indicator_rated_color: var(--sapContent_RatedColor, #E76500);--udex-rating_indicator_unrated_color: var(--sapContent_RatedColor, #E76500);--udex-rating_indicator_read-only-unrated_color: var(--udexColorGrey6 ,#5B738B);--udex-rating_indicator_disabled-unrated_color: var(--udexColorMango6, #E76500);--udex-rating_indicator_rated_hover_color: var(--udexColorMango7, #C35500);--udex-rating_indicator_unrated_hover_color: var(--udexColorMango7, #C35500)}:host(:not([hidden])){display:inline-flex;margin:var(--_ui5-v2-19-0_rating_indicator_component_spacing);cursor:pointer}:host([disabled]){opacity:var(--udex_rating_indicator_disabled_opacity);cursor:initial;outline:none}:host([readonly]){cursor:initial}:host([disabled]) .udex-rating-indicator__item-unsel,:host([readonly]) .udex-rating-indicator__item-unsel{width:var(--udex_rating_indicator_readonly_item_width);height:var(--udex_rating_indicator_readonly_item_height);padding-inline:0}:host([disabled]) .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_disabled-unrated_color)}:host([readonly]) .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_read-only-unrated_color)}:host([_focused]){outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);outline-offset:.125rem;border-radius:.25rem}[ui5-icon]{display:flex;text-shadow:var(--sapContent_TextShadow)}.udex-rating-indicator{font-family:var(--sapFontFamily);font-size:var(--sapFontSize, 16px);padding:0;outline:none;position:relative;display:inline-flex;gap:12px;align-items:center}.udex-rating-indicator__total{color:var(--udexColorGrey6);line-height:24px}.udex-rating-indicator__list{list-style-type:none;display:flex;align-items:center;margin:0;padding:0}.udex-rating-indicator__item{position:relative;width:var(--udex_rating_indicator_item_width);height:var(--udex_rating_indicator_item_height)}.udex-rating-indicator__item:not(:last-child){margin-inline-end:var(--udex-rating_indicator_items_gap)}.udex-rating-indicator__item [ui5-icon]{width:100%;height:100%;color:inherit;user-select:none}.udex-rating-indicator__item.udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_unrated_color)}.udex-rating-indicator__item.udex-rating-indicator__item-sel,.udex-rating-indicator__item.udex-rating-indicator__item-half{color:var(--udex-rating_indicator_rated_color)}.udex-rating-indicator__item [ui5-icon].udex-rating-indicator__half-icon{position:absolute;inset-inline-start:50%;color:var(--udex-rating_indicator_rated_color)}:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-sel,:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__half-icon,:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-half{color:var(--udex-rating_indicator_rated_hover_color)}:host(:not([readonly]):not([disabled])) .ui5-rating-indicator-root:hover{opacity:1}:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_unrated_hover_color)}.udex-rating-indicator__half-icon-wrapper{width:100%;height:100%;position:absolute;inset-inline-start:-50%;top:0;z-index:32;overflow:hidden}.udex-rating-indicator--mobile .udex-rating-indicator__half-icon-wrapper{top:var(--udex_rating_indicator_mobile_item_padding)}.udex-rating-indicator--mobile .udex-rating-indicator__item [ui5-icon].udex-rating-indicator__half-icon{height:var(--udex_rating_indicator_item_height)}.udex-rating-indicator--mobile .udex-rating-indicator__item{padding:var(--udex_rating_indicator_mobile_item_padding)}:host([readonly]) .udex-rating-indicator--mobile .udex-rating-indicator__item-unsel,:host([disabled]) .udex-rating-indicator--mobile .udex-rating-indicator__item-unsel{padding-left:var(--udex_rating_indicator_mobile_item_padding);padding-right:var(--udex_rating_indicator_mobile_item_padding)}.udex-rating-indicator--mobile .udex-rating-indicator__item:not(:last-child){margin-inline-end:var(--udex-rating_indicator_mobile_items_gap)}
8
+ export default `:host{--udex_rating_indicator_readonly_item_width: 1.5rem;--udex_rating_indicator_readonly_item_height: 1.5rem;--udex_rating_indicator_item_width: 1.5rem;--udex_rating_indicator_item_height: 1.5rem;--udex_rating_indicator_mobile_item_padding: 10px;--udex_rating_indicator_disabled_opacity: .4;--udex-rating_indicator_items_gap: 8px;--udex-rating_indicator_mobile_items_gap: 8px;--udex-rating_indicator_rated_color: var(--sapContent_RatedColor, #E76500);--udex-rating_indicator_unrated_color: var(--sapContent_RatedColor, #E76500);--udex-rating_indicator_read-only-unrated_color: var(--udexColorGrey6 ,#5B738B);--udex-rating_indicator_disabled-unrated_color: var(--udexColorMango6, #E76500);--udex-rating_indicator_rated_hover_color: var(--udexColorMango7, #C35500);--udex-rating_indicator_unrated_hover_color: var(--udexColorMango7, #C35500)}:host(:not([hidden])){display:inline-flex;margin:var(--_ui5-v2-20-1_rating_indicator_component_spacing);cursor:pointer}:host([disabled]){opacity:var(--udex_rating_indicator_disabled_opacity);cursor:initial;outline:none}:host([readonly]){cursor:initial}:host([disabled]) .udex-rating-indicator__item-unsel,:host([readonly]) .udex-rating-indicator__item-unsel{width:var(--udex_rating_indicator_readonly_item_width);height:var(--udex_rating_indicator_readonly_item_height);padding-inline:0}:host([disabled]) .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_disabled-unrated_color)}:host([readonly]) .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_read-only-unrated_color)}:host([_focused]){outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);outline-offset:.125rem;border-radius:.25rem}[ui5-icon]{display:flex;text-shadow:var(--sapContent_TextShadow)}.udex-rating-indicator{font-family:var(--sapFontFamily);font-size:var(--sapFontSize, 16px);padding:0;outline:none;position:relative;display:inline-flex;gap:12px;align-items:center}.udex-rating-indicator__total{color:var(--udexColorGrey6);line-height:24px}.udex-rating-indicator__list{list-style-type:none;display:flex;align-items:center;margin:0;padding:0}.udex-rating-indicator__item{position:relative;width:var(--udex_rating_indicator_item_width);height:var(--udex_rating_indicator_item_height)}.udex-rating-indicator__item:not(:last-child){margin-inline-end:var(--udex-rating_indicator_items_gap)}.udex-rating-indicator__item [ui5-icon]{width:100%;height:100%;color:inherit;user-select:none}.udex-rating-indicator__item.udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_unrated_color)}.udex-rating-indicator__item.udex-rating-indicator__item-sel,.udex-rating-indicator__item.udex-rating-indicator__item-half{color:var(--udex-rating_indicator_rated_color)}.udex-rating-indicator__item [ui5-icon].udex-rating-indicator__half-icon{position:absolute;inset-inline-start:50%;color:var(--udex-rating_indicator_rated_color)}:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-sel,:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__half-icon,:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-half{color:var(--udex-rating_indicator_rated_hover_color)}:host(:not([readonly]):not([disabled])) .ui5-rating-indicator-root:hover{opacity:1}:host(:not([readonly]):not([disabled])) .udex-rating-indicator:hover .udex-rating-indicator__item-unsel{color:var(--udex-rating_indicator_unrated_hover_color)}.udex-rating-indicator__half-icon-wrapper{width:100%;height:100%;position:absolute;inset-inline-start:-50%;top:0;z-index:32;overflow:hidden}.udex-rating-indicator--mobile .udex-rating-indicator__half-icon-wrapper{top:var(--udex_rating_indicator_mobile_item_padding)}.udex-rating-indicator--mobile .udex-rating-indicator__item [ui5-icon].udex-rating-indicator__half-icon{height:var(--udex_rating_indicator_item_height)}.udex-rating-indicator--mobile .udex-rating-indicator__item{padding:var(--udex_rating_indicator_mobile_item_padding)}:host([readonly]) .udex-rating-indicator--mobile .udex-rating-indicator__item-unsel,:host([disabled]) .udex-rating-indicator--mobile .udex-rating-indicator__item-unsel{padding-left:var(--udex_rating_indicator_mobile_item_padding);padding-right:var(--udex_rating_indicator_mobile_item_padding)}.udex-rating-indicator--mobile .udex-rating-indicator__item:not(:last-child){margin-inline-end:var(--udex-rating_indicator_mobile_items_gap)}
9
9
  `
@@ -5,5 +5,5 @@ import defaultTheme from "./sap_horizon/parameters-bundle.css.js";
5
5
 
6
6
  registerThemePropertiesLoader("@" + "ui5" + "/" + "webcomponents-theming", "sap_horizon", async () => defaultThemeBase);
7
7
  registerThemePropertiesLoader("@" + "s" + "a" + "p" + "u" + "d" + "e" + "x" + "/" + "w" + "e" + "b" + "-" + "c" + "o" + "m" + "p" + "o" + "n" + "e" + "n" + "t" + "s", "sap_horizon", async () => defaultTheme);
8
- export default `:host{--udex-slider-color-track-start-point: var(--sapSlider_Selected_Background, #0070f2);--udex-slider-color-track-active: var(--sapSlider_Selected_Background, #0070f2);--udex-slider-color-handle-focus-range: var(--sapSlider_Selected_BorderColor, #0070f2);--udex-slider-color-handle-active-background: var(--sapSlider_Active_HandleBackground, #ffffff);--udex-slider-color-handle-default-icon: var(--sapContent_Selected_ForegroundColor, #0040b0);--udex-slider-radius-range-size: var(--udexRadiusM, 8px);--udex-slider-handle-width: 2.75rem;--udex-slider-handle-top: -.875rem;--udex-slider-handle-height: var(--udexSpacer32, 2rem);--udex-slider-start-end-point-left: -.875rem;--udex-slider-start-end-point-right: -.875rem;--udex-slider-progress-after-background: var(--sapContent_MeasureIndicatorColor,#5b738b);--udex-slider-handle-icon-size: var(--udexSpacer20, 1.25rem);--udex-slider-tooltip-bottom: 2.5rem;--udex-slider-tooltip-border: 1px solid var(--sapField_BorderColor, #5B738B);--udex-slider-tooltip-border-radius: var(--udexSpacer4, .25rem);--udex-slider-tooltip-font-size: var(--udexTypographyNavigationRegularMFontSize,14px);--udex-slider-tooltip-color: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-tooltip-height: var(--udexSpacer32, 2rem);--udex-slider-tooltip-min-width: 2.75rem;--udex-slider-tickmark-in-range-bg: var(--sapSlider_Selected_BorderColor,#0070f2);--udex-slider-tickmark-bg: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-label-color: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-handle-focus-border: 2px solid var(--sapSlider_Active_HandleBorderColor);--udex-slider-progress-focus-top: -1.18rem;--udex-slider-progress-focus-left:calc(-1.375rem - 5px);--udex-slider-progress-focus-height: 42px;--udex-slider-progress-focus-width:calc(100% + 2.75rem + 10px)}:host{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);color:var(--sapContent_MeasureIndicatorColor, #5b738b);height:74px}.ui5-slider-progress-container:before{background-color:var(--udex-slider-color-track-start-point)}.ui5-slider-progress{background-color:var(--udex-slider-color-track-active)}.ui5-slider-progress:focus:after{border:2px solid var(--udex-slider-color-handle-focus-range);border-radius:var(--udex-slider-radius-range-size);top:var(--udex-slider-progress-focus-top);height:var(--udex-slider-progress-focus-height);width:var(--udex-slider-progress-focus-width);left:var(--udex-slider-progress-focus-left)}:host([desktop]) .ui5-slider-handle:focus,.ui5-slider-handle:focus-visible{background-color:var(--_ui5-v2-19-0_range_slider_handle_background_focus)}:host .ui5-slider-inner .ui5-slider-labels{top:34px}:host .ui5-slider-inner .ui5-slider-labels li{height:1.375rem;font-family:var(--sapFontFamily);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px)}[slider-icon]{color:var(--udex-slider-color-handle-default-icon)}.ui5-slider-root:focus .ui5-slider-inner .ui5-slider-handle,.ui5-slider-handle:focus{border:var(--udex-slider-handle-focus-border)}.ui5-slider-labels li{color:var(--udex-slider-label-color)}.ui5-slider-tickmarks li{border-inline-start:1px solid var(--udex-slider-tickmark-bg)}.ui5-slider-tickmarks li.ui5-slider-tickmark-in-range{border-inline-start:1px solid var(--udex-slider-tickmark-in-range-bg)}:host(:not([hidden])) .ui5-slider-handle-container .ui5-slider-tooltip{bottom:var(--udex-slider-tooltip-bottom);border:var(--udex-slider-tooltip-border);border-radius:var(--udex-slider-tooltip-border-radius);font-size:var(--udex-slider-tooltip-font-size);color:var(--udex-slider-tooltip-color);height:var(--udex-slider-tooltip-height);min-width:var(--udex-slider-tooltip-min-width)}[slider-icon]{width:var(--udex-slider-handle-icon-size);height:var(--udex-slider-handle-icon-size)}.ui5-slider-progress-container:after{background-color:var(--udex-slider-progress-after-background)}.ui5-slider-progress-container:before{inset-inline-start:var(--udex-slider-start-end-point-left)}.ui5-slider-progress-container:after{inset-inline-end:var(--udex-slider-start-end-point-right)}.ui5-slider-handle-container{margin-inline-start:calc(-1 * var(--udex-slider-handle-width) / 2);top:var(--udex-slider-handle-top)}.ui5-slider-handle{height:var(--udex-slider-handle-height);width:var(--udex-slider-handle-width)}
8
+ export default `:host{--udex-slider-color-track-start-point: var(--sapSlider_Selected_Background, #0070f2);--udex-slider-color-track-active: var(--sapSlider_Selected_Background, #0070f2);--udex-slider-color-handle-focus-range: var(--sapSlider_Selected_BorderColor, #0070f2);--udex-slider-color-handle-active-background: var(--sapSlider_Active_HandleBackground, #ffffff);--udex-slider-color-handle-default-icon: var(--sapContent_Selected_ForegroundColor, #0040b0);--udex-slider-radius-range-size: var(--udexRadiusM, 8px);--udex-slider-handle-width: 2.75rem;--udex-slider-handle-top: -.875rem;--udex-slider-handle-height: var(--udexSpacer32, 2rem);--udex-slider-start-end-point-left: -.875rem;--udex-slider-start-end-point-right: -.875rem;--udex-slider-progress-after-background: var(--sapContent_MeasureIndicatorColor,#5b738b);--udex-slider-handle-icon-size: var(--udexSpacer20, 1.25rem);--udex-slider-tooltip-bottom: 2.5rem;--udex-slider-tooltip-border: 1px solid var(--sapField_BorderColor, #5B738B);--udex-slider-tooltip-border-radius: var(--udexSpacer4, .25rem);--udex-slider-tooltip-font-size: var(--udexTypographyNavigationRegularMFontSize,14px);--udex-slider-tooltip-color: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-tooltip-height: var(--udexSpacer32, 2rem);--udex-slider-tooltip-min-width: 2.75rem;--udex-slider-tickmark-in-range-bg: var(--sapSlider_Selected_BorderColor,#0070f2);--udex-slider-tickmark-bg: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-label-color: var(--sapContent_MeasureIndicatorColor, #5b738b);--udex-slider-handle-focus-border: 2px solid var(--sapSlider_Active_HandleBorderColor);--udex-slider-progress-focus-top: -1.18rem;--udex-slider-progress-focus-left:calc(-1.375rem - 5px);--udex-slider-progress-focus-height: 42px;--udex-slider-progress-focus-width:calc(100% + 2.75rem + 10px)}:host{font-family:var(--sapFontFamily);font-weight:var(--udexTypographyFontWeightRegular, 400);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px);line-height:var(--udexTypographyHeadingLineHeight, 1.1);color:var(--sapContent_MeasureIndicatorColor, #5b738b);height:74px}.ui5-slider-progress-container:before{background-color:var(--udex-slider-color-track-start-point)}.ui5-slider-progress{background-color:var(--udex-slider-color-track-active)}.ui5-slider-progress:focus:after{border:2px solid var(--udex-slider-color-handle-focus-range);border-radius:var(--udex-slider-radius-range-size);top:var(--udex-slider-progress-focus-top);height:var(--udex-slider-progress-focus-height);width:var(--udex-slider-progress-focus-width);left:var(--udex-slider-progress-focus-left)}:host([desktop]) .ui5-slider-handle:focus,.ui5-slider-handle:focus-visible{background-color:var(--_ui5-v2-20-1_range_slider_handle_background_focus)}:host .ui5-slider-inner .ui5-slider-labels{top:34px}:host .ui5-slider-inner .ui5-slider-labels li{height:1.375rem;font-family:var(--sapFontFamily);font-size:var(--udexTypographyNavigationRegularMFontSize, 14px)}[slider-icon]{color:var(--udex-slider-color-handle-default-icon)}.ui5-slider-root:focus .ui5-slider-inner .ui5-slider-handle,.ui5-slider-handle:focus{border:var(--udex-slider-handle-focus-border)}.ui5-slider-labels li{color:var(--udex-slider-label-color)}.ui5-slider-tickmarks li{border-inline-start:1px solid var(--udex-slider-tickmark-bg)}.ui5-slider-tickmarks li.ui5-slider-tickmark-in-range{border-inline-start:1px solid var(--udex-slider-tickmark-in-range-bg)}:host(:not([hidden])) .ui5-slider-handle-container .ui5-slider-tooltip{bottom:var(--udex-slider-tooltip-bottom);border:var(--udex-slider-tooltip-border);border-radius:var(--udex-slider-tooltip-border-radius);font-size:var(--udex-slider-tooltip-font-size);color:var(--udex-slider-tooltip-color);height:var(--udex-slider-tooltip-height);min-width:var(--udex-slider-tooltip-min-width)}[slider-icon]{width:var(--udex-slider-handle-icon-size);height:var(--udex-slider-handle-icon-size)}.ui5-slider-progress-container:after{background-color:var(--udex-slider-progress-after-background)}.ui5-slider-progress-container:before{inset-inline-start:var(--udex-slider-start-end-point-left)}.ui5-slider-progress-container:after{inset-inline-end:var(--udex-slider-start-end-point-right)}.ui5-slider-handle-container{margin-inline-start:calc(-1 * var(--udex-slider-handle-width) / 2);top:var(--udex-slider-handle-top)}.ui5-slider-handle{height:var(--udex-slider-handle-height);width:var(--udex-slider-handle-width)}
9
9
  `
@@ -54,6 +54,7 @@
54
54
 
55
55
  /* Text, author and link styles */
56
56
  .udex-quote__text-container {
57
+ quotes: "\201C""\201D";
57
58
  position: relative;
58
59
  margin: 0;
59
60
  }
@@ -180,12 +181,16 @@
180
181
  }
181
182
 
182
183
  @media (max-width: 639px) {
183
- .udex-quote__container,
184
- :host([image-placement='right']) .udex-quote__container {
184
+ .udex-quote__container {
185
185
  flex-direction: column;
186
186
  gap: var(--udexSpacer16);
187
187
  }
188
188
 
189
+ :host([image-placement='right']) .udex-quote__container {
190
+ flex-direction: column-reverse;
191
+ gap: var(--udexSpacer16);
192
+ }
193
+
189
194
  ::slotted([slot='image']) {
190
195
  margin: 0 auto;
191
196
  }