@sapudex/web-components 2.29.0 → 2.31.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 (270) hide show
  1. package/cypress/specs/FilterMenu.cy.tsx +39 -1
  2. package/cypress/specs/List.cy.tsx +171 -0
  3. package/cypress/specs/ListItem.cy.tsx +22 -26
  4. package/cypress/specs/PromoTile.cy.tsx +10 -0
  5. package/cypress/specs/ReviewItem.cy.tsx +48 -14
  6. package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +12 -12
  7. package/cypress/specs/SelectBox.cy.tsx +76 -0
  8. package/cypress/support/component-imports.instrumented.ts +4 -0
  9. package/cypress/support/component-imports.src.ts +5 -1
  10. package/dist/Avatar.d.ts +1 -0
  11. package/dist/Avatar.js +9 -0
  12. package/dist/Avatar.js.map +1 -1
  13. package/dist/Breadcrumbs.d.ts +0 -4
  14. package/dist/Breadcrumbs.js +7 -16
  15. package/dist/Breadcrumbs.js.map +1 -1
  16. package/dist/BreadcrumbsTemplate.js +1 -1
  17. package/dist/BreadcrumbsTemplate.js.map +1 -1
  18. package/dist/FilterMenu.d.ts +2 -0
  19. package/dist/FilterMenu.js +2 -0
  20. package/dist/FilterMenu.js.map +1 -1
  21. package/dist/ImageGridTickerTemplate.js +2 -1
  22. package/dist/ImageGridTickerTemplate.js.map +1 -1
  23. package/dist/List.d.ts +4 -2
  24. package/dist/List.js +45 -12
  25. package/dist/List.js.map +1 -1
  26. package/dist/ListGroupHeader.d.ts +4 -0
  27. package/dist/ListGroupHeader.js +26 -1
  28. package/dist/ListGroupHeader.js.map +1 -1
  29. package/dist/ListGroupHeaderBase.js +1 -1
  30. package/dist/ListGroupHeaderBase.js.map +1 -1
  31. package/dist/ListItem.js +1 -1
  32. package/dist/ListItem.js.map +1 -1
  33. package/dist/ListItemBase.d.ts +40 -3
  34. package/dist/ListItemBase.js +70 -9
  35. package/dist/ListItemBase.js.map +1 -1
  36. package/dist/MastheadCountrySelector.d.ts +3 -15
  37. package/dist/MastheadCountrySelector.js +28 -72
  38. package/dist/MastheadCountrySelector.js.map +1 -1
  39. package/dist/MastheadItem.d.ts +10 -2
  40. package/dist/MastheadItem.js +26 -15
  41. package/dist/MastheadItem.js.map +1 -1
  42. package/dist/MastheadMenu.d.ts +2 -2
  43. package/dist/MastheadMenu.js +9 -9
  44. package/dist/MastheadMenu.js.map +1 -1
  45. package/dist/MastheadMenuItem.d.ts +7 -0
  46. package/dist/MastheadMenuItem.js +3 -0
  47. package/dist/MastheadMenuItem.js.map +1 -1
  48. package/dist/MastheadMobileMenu.d.ts +2 -12
  49. package/dist/MastheadMobileMenu.js +31 -116
  50. package/dist/MastheadMobileMenu.js.map +1 -1
  51. package/dist/MastheadProfileMenu.js +1 -1
  52. package/dist/MastheadProfileMenu.js.map +1 -1
  53. package/dist/MastheadShell.d.ts +1 -6
  54. package/dist/MastheadShell.js +7 -44
  55. package/dist/MastheadShell.js.map +1 -1
  56. package/dist/Pagination.d.ts +14 -1
  57. package/dist/Pagination.js +40 -7
  58. package/dist/Pagination.js.map +1 -1
  59. package/dist/PromoTile.d.ts +8 -0
  60. package/dist/PromoTile.js +4 -0
  61. package/dist/PromoTile.js.map +1 -1
  62. package/dist/PromoTileTemplate.js +3 -1
  63. package/dist/PromoTileTemplate.js.map +1 -1
  64. package/dist/ReviewItem.d.ts +8 -7
  65. package/dist/ReviewItem.js +35 -36
  66. package/dist/ReviewItem.js.map +1 -1
  67. package/dist/ReviewItemTemplate.js +3 -1
  68. package/dist/ReviewItemTemplate.js.map +1 -1
  69. package/dist/SearchableListBase.d.ts +3 -0
  70. package/dist/SearchableListBase.js +37 -1
  71. package/dist/SearchableListBase.js.map +1 -1
  72. package/dist/SecondaryNavigationItem.js +7 -1
  73. package/dist/SecondaryNavigationItem.js.map +1 -1
  74. package/dist/SelectBase.js +28 -7
  75. package/dist/SelectBase.js.map +1 -1
  76. package/dist/SelectBox.js +0 -1
  77. package/dist/SelectBox.js.map +1 -1
  78. package/dist/TextField.d.ts +1 -1
  79. package/dist/TextField.js.map +1 -1
  80. package/dist/assets/{InputSuggestions-GMbG8xQ2.js → InputSuggestions-i2kFpCfC.js} +1 -1
  81. package/dist/assets/{ListItemStandardExpandableTextTemplate-IyZB_qzJ.js → ListItemStandardExpandableTextTemplate-C1ceDaxu.js} +1 -1
  82. package/dist/assets/{bundle.esm-Dg7j0PXg.js → bundle.esm-DQ3cxywT.js} +216 -216
  83. package/dist/assets/messagebundle_en-DWAgV5VH.js +1 -0
  84. package/dist/css/themes/BreadcrumbsPopover.css +1 -1
  85. package/dist/css/themes/Dropdown.css +1 -1
  86. package/dist/css/themes/FilterMenu.css +1 -1
  87. package/dist/css/themes/ImageGridTicker.css +1 -1
  88. package/dist/css/themes/Link.css +1 -1
  89. package/dist/css/themes/ListGroupHeader.css +1 -1
  90. package/dist/css/themes/ListItem.css +1 -1
  91. package/dist/css/themes/MastheadCountrySelector.css +1 -1
  92. package/dist/css/themes/MastheadItem.css +1 -1
  93. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  94. package/dist/css/themes/MastheadShell.css +1 -1
  95. package/dist/css/themes/Modal.css +1 -1
  96. package/dist/css/themes/RatingIndicator.css +1 -1
  97. package/dist/css/themes/ReviewItem.css +1 -1
  98. package/dist/css/themes/SecondaryNavigation.css +1 -1
  99. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  100. package/dist/css/themes/SecondaryNavigationSubItem.css +1 -1
  101. package/dist/css/themes/Slider.css +1 -1
  102. package/dist/custom-elements-internal.json +986 -19
  103. package/dist/custom-elements.json +734 -13
  104. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  105. package/dist/generated/i18n/i18n-defaults.d.ts +6 -1
  106. package/dist/generated/i18n/i18n-defaults.js +6 -1
  107. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  108. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +17 -10
  109. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  110. package/dist/generated/templates/ListItemTemplate.lit.js +32 -34
  111. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  112. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +3 -3
  113. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
  114. package/dist/generated/templates/MastheadItemTemplate.lit.js +33 -25
  115. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
  116. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +1 -1
  117. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
  118. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +5 -5
  119. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
  120. package/dist/generated/templates/MastheadShellTemplate.lit.js +9 -10
  121. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  122. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +1 -1
  123. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  124. package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
  125. package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
  126. package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
  127. package/dist/generated/themes/Dropdown.css.d.ts +1 -1
  128. package/dist/generated/themes/Dropdown.css.js +1 -1
  129. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  130. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  131. package/dist/generated/themes/FilterMenu.css.js +1 -1
  132. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  133. package/dist/generated/themes/ImageGridTicker.css.d.ts +1 -1
  134. package/dist/generated/themes/ImageGridTicker.css.js +1 -1
  135. package/dist/generated/themes/ImageGridTicker.css.js.map +1 -1
  136. package/dist/generated/themes/Link.css.d.ts +1 -1
  137. package/dist/generated/themes/Link.css.js +1 -1
  138. package/dist/generated/themes/Link.css.js.map +1 -1
  139. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  140. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  141. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  142. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  143. package/dist/generated/themes/ListItem.css.js +1 -1
  144. package/dist/generated/themes/ListItem.css.js.map +1 -1
  145. package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
  146. package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
  147. package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
  148. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  149. package/dist/generated/themes/MastheadItem.css.js +1 -1
  150. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  151. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  152. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  153. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  154. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  155. package/dist/generated/themes/MastheadShell.css.js +1 -1
  156. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  157. package/dist/generated/themes/Modal.css.d.ts +1 -1
  158. package/dist/generated/themes/Modal.css.js +1 -1
  159. package/dist/generated/themes/Modal.css.js.map +1 -1
  160. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  161. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  162. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  163. package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
  164. package/dist/generated/themes/ReviewItem.css.js +1 -1
  165. package/dist/generated/themes/ReviewItem.css.js.map +1 -1
  166. package/dist/generated/themes/SecondaryNavigation.css.d.ts +1 -1
  167. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  168. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  169. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
  170. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  171. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  172. package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +1 -1
  173. package/dist/generated/themes/SecondaryNavigationSubItem.css.js +1 -1
  174. package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -1
  175. package/dist/generated/themes/Slider.css.d.ts +1 -1
  176. package/dist/generated/themes/Slider.css.js +1 -1
  177. package/dist/generated/themes/Slider.css.js.map +1 -1
  178. package/dist/messagebundle.properties +9 -0
  179. package/dist/messagebundle_en.properties +3 -0
  180. package/dist/types/List.d.ts +0 -2
  181. package/dist/types/List.js +0 -2
  182. package/dist/types/List.js.map +1 -1
  183. package/dist/types/SearchableListBase.d.ts +1 -0
  184. package/dist/types/SearchableListBase.js.map +1 -1
  185. package/dist/vscode.html-custom-data.json +144 -85
  186. package/dist/web-types.json +303 -83
  187. package/package.json +2 -1
  188. package/src/Avatar.ts +9 -0
  189. package/src/Breadcrumbs.ts +8 -20
  190. package/src/BreadcrumbsTemplate.tsx +1 -1
  191. package/src/FilterMenu.ts +4 -0
  192. package/src/ImageGridTickerTemplate.tsx +3 -1
  193. package/src/List.ts +51 -14
  194. package/src/ListGroupHeader.hbs +128 -17
  195. package/src/ListGroupHeader.ts +31 -1
  196. package/src/ListGroupHeaderBase.ts +1 -1
  197. package/src/ListItem.hbs +15 -2
  198. package/src/ListItem.ts +1 -1
  199. package/src/ListItemBase.ts +105 -7
  200. package/src/MastheadCountrySelector.hbs +6 -3
  201. package/src/MastheadCountrySelector.ts +31 -85
  202. package/src/MastheadItem.hbs +31 -23
  203. package/src/MastheadItem.ts +28 -18
  204. package/src/MastheadMenu.ts +10 -9
  205. package/src/MastheadMenuItem.hbs +1 -0
  206. package/src/MastheadMenuItem.ts +9 -0
  207. package/src/MastheadMobileMenu.hbs +5 -6
  208. package/src/MastheadMobileMenu.ts +34 -130
  209. package/src/MastheadProfileMenu.ts +1 -1
  210. package/src/MastheadShell.hbs +9 -11
  211. package/src/MastheadShell.ts +8 -50
  212. package/src/Pagination.ts +52 -8
  213. package/src/PromoTile.ts +10 -0
  214. package/src/PromoTileTemplate.tsx +4 -1
  215. package/src/ReviewItem.ts +45 -35
  216. package/src/ReviewItemTemplate.tsx +16 -14
  217. package/src/SearchableListBase.hbs +3 -0
  218. package/src/SearchableListBase.ts +52 -1
  219. package/src/SecondaryNavigationItem.ts +1 -2
  220. package/src/SelectBase.ts +33 -7
  221. package/src/SelectBox.ts +0 -1
  222. package/src/TextField.ts +1 -1
  223. package/src/generated/i18n/i18n-defaults.ts +2 -2
  224. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +17 -10
  225. package/src/generated/templates/ListItemTemplate.lit.ts +32 -34
  226. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +3 -3
  227. package/src/generated/templates/MastheadItemTemplate.lit.ts +33 -25
  228. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
  229. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +5 -5
  230. package/src/generated/templates/MastheadShellTemplate.lit.ts +9 -10
  231. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +1 -1
  232. package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
  233. package/src/generated/themes/Dropdown.css.ts +1 -1
  234. package/src/generated/themes/FilterMenu.css.ts +1 -1
  235. package/src/generated/themes/ImageGridTicker.css.ts +1 -1
  236. package/src/generated/themes/Link.css.ts +1 -1
  237. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  238. package/src/generated/themes/ListItem.css.ts +1 -1
  239. package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
  240. package/src/generated/themes/MastheadItem.css.ts +1 -1
  241. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  242. package/src/generated/themes/MastheadShell.css.ts +1 -1
  243. package/src/generated/themes/Modal.css.ts +1 -1
  244. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  245. package/src/generated/themes/ReviewItem.css.ts +1 -1
  246. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  247. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  248. package/src/generated/themes/SecondaryNavigationSubItem.css.ts +1 -1
  249. package/src/generated/themes/Slider.css.ts +1 -1
  250. package/src/i18n/messagebundle.properties +9 -0
  251. package/src/i18n/messagebundle_en.properties +3 -0
  252. package/src/themes/BreadcrumbsPopover.css +2 -0
  253. package/src/themes/Dropdown.css +5 -1
  254. package/src/themes/FilterMenu.css +2 -2
  255. package/src/themes/ImageGridTicker.css +2 -26
  256. package/src/themes/Link.css +2 -3
  257. package/src/themes/ListGroupHeader.css +102 -15
  258. package/src/themes/ListItem.css +67 -15
  259. package/src/themes/MastheadCountrySelector.css +3 -1
  260. package/src/themes/MastheadItem.css +88 -3
  261. package/src/themes/MastheadProfileMenu.css +1 -9
  262. package/src/themes/MastheadShell.css +0 -2
  263. package/src/themes/Modal.css +2 -1
  264. package/src/themes/ReviewItem.css +18 -1
  265. package/src/themes/SecondaryNavigation.css +6 -3
  266. package/src/themes/SecondaryNavigationItem.css +11 -10
  267. package/src/themes/SecondaryNavigationSubItem.css +3 -2
  268. package/src/types/List.ts +0 -2
  269. package/src/types/SearchableListBase.ts +1 -0
  270. package/dist/assets/messagebundle_en-DfoXjU7o.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PromoTile.js","sourceRoot":"","sources":["../src/PromoTile.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport PromoTileTemplate from \"./PromoTileTemplate.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { PROMO_TILE, PROMO_TILE_ICON } from \"./generated/i18n/i18n-defaults.js\";\nimport { BreakpointUtils } from \"./utils/Breakpoints.js\";\nimport type UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\nimport { UDExPromoTileColorScheme, UDExPromoTileMode } from \"./types/PromoTile.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport PromoTileCss from \"./generated/themes/PromoTile.css.js\";\n\nexport enum UDExOrientation {\n Vertical = \"Vertical\",\n Horizontal = \"Horizontal\",\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-promo-tile</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/PromoTile.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @tagname udex-promo-tile\n * @public\n */\n@customElement({\n tag: \"udex-promo-tile\",\n renderer: jsxRenderer,\n styles: PromoTileCss,\n template: PromoTileTemplate,\n})\n\n/**\n * Triggered when the user clicks on the CTA button\n *\n * @public\n */\n@event(\"button-click\", { cancelable: true, bubbles: true })\n\nclass UDExPromoTile extends UI5Element {\n eventDetails!: {\n \"button-click\": void,\n };\n\n /**\n * Defines the text content of the Promo Tile.\n *\n * @slot content\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true })\n content!: Array<HTMLElement>;\n\n /**\n * Defines the custom pictogram of the Promo Tile.\n *\n * @slot pictogram\n * @public\n */\n @slot({ type: HTMLElement })\n pictogram?: Array<HTMLElement>;\n\n /**\n * Defines the orientation of the Promo Tile component.\n *\n * @default \"Vertical\"\n * @public\n */\n @property()\n orientation: `${UDExOrientation}` = UDExOrientation.Vertical;\n\n /**\n * Defines the UI5 icon name in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n icon?: string;\n\n /**\n * Defines the image aria label and alt in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n imageLabel?: string;\n\n /**\n * Defines the logo URL in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n logoUrl?: string;\n\n /**\n * Defines the header text of the promo tile.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n header?: string;\n\n /**\n * Defines the eyebrow text of the promo tile.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n eyebrow?: string;\n\n /**\n * Defines the CTA button label\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n button?: string;\n\n /**\n * Defines the CTA button design\n *\n * @default \"\"\n * @public\n */\n @property()\n buttonDesign?: UDExButtonDesign;\n\n /**\n * Defines the color scheme of the Promo Tile.\n *\n * @default \"\"\n * @public\n */\n @property()\n colorScheme?: UDExPromoTileColorScheme;\n\n /**\n * Defines the accessible name of the component.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n accessibleName?: string;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _handleResizeBound: ResizeObserverCallback;\n _button: UDExButton | undefined;\n _colorMode: UDExPromoTileMode = UDExPromoTileMode.light;\n _lightModeColors: Array<number> = [1, 2];\n _darkModeColors: Array<number> = [7, 8, 9, 10];\n\n constructor() {\n super();\n this._handleResizeBound = this._handleResize.bind(this);\n }\n\n onEnterDOM(): void {\n if (isDesktop()) {\n this.setAttribute(\"desktop\", \"\");\n }\n ResizeHandler.register(this, this._handleResizeBound);\n }\n\n onExitDOM(): void {\n ResizeHandler.deregister(this, this._handleResizeBound);\n }\n\n onAfterRendering() {\n this._button = this.getButton();\n this.applyColorScheme();\n }\n\n _handleResize(): void {\n if (this._button) {\n this._button.size = this.isMobile ? UDExButtonSize.Medium : UDExButtonSize.Large;\n }\n }\n\n getButton(): UDExButton | undefined {\n return this.shadowRoot!.querySelector<UDExButton>(\"[udex-button]\")!;\n }\n\n applyColorScheme(): void {\n if (!this.colorScheme) {\n return;\n }\n\n this._colorMode = this.checkColorMode(this.colorScheme);\n const eyebrowColor = this.checkEyebrowColor(this.colorScheme);\n\n if (this._colorMode === UDExPromoTileMode.dark) {\n if (this._button) {\n this._button.design = this.buttonDesign || UDExButtonDesign.Secondary;\n }\n this.style.setProperty(\"--udex-promo-tile-icon-fill-color\", `var(--udexCoreTextLight)`);\n }\n this.style.setProperty(\"--udex-promo-tile-background\", `var(--udexColor${this.colorScheme})`);\n this.style.setProperty(\"--udex-promo-tile-eyebrow-color\", `var(--udexColor${eyebrowColor})`);\n }\n\n getColorNumber(colorScheme: string): number {\n const match = colorScheme.match(/\\d+/);\n return match ? parseInt(match[0]) : 0;\n }\n\n checkColorMode(colorScheme: string): UDExPromoTileMode {\n const number = this.getColorNumber(colorScheme);\n\n if (number && this._darkModeColors.includes(number)) {\n return UDExPromoTileMode.dark;\n }\n return UDExPromoTileMode.light;\n }\n\n checkEyebrowColor(colorScheme: string): string {\n const number = this.getColorNumber(colorScheme);\n let color: string = UDExPromoTileColorScheme.Blue8;\n\n if (number === 7) {\n color = \"NeutralWhite\";\n } else if (this._darkModeColors.includes(number)) {\n color = colorScheme.replace(`${number}`, `${number - 7}`);\n } else if (this._lightModeColors.includes(number)) {\n color = colorScheme.replace(`${number}`, `${number + 7}`);\n }\n return color;\n }\n\n handleCTAButtonClick(e: Event) {\n e.preventDefault();\n this.fireDecoratorEvent(\"button-click\");\n }\n\n get isMobile(): boolean {\n return BreakpointUtils.isAtMost(\"S\");\n }\n\n get promoTileContainerText(): string {\n return this.accessibleName || this.header || translate(UDExPromoTile, PROMO_TILE);\n }\n\n get _showPictogram(): boolean {\n return !!this.icon || !!this.logoUrl || !!this.pictogram?.length;\n }\n\n get _showLogo(): boolean {\n return !this.icon && !!this.logoUrl;\n }\n\n get _imageLabel(): string {\n return this.imageLabel || translate(UDExPromoTile, PROMO_TILE_ICON);\n }\n}\n\nUDExPromoTile.define();\n\nexport default UDExPromoTile;\n"]}
1
+ {"version":3,"file":"PromoTile.js","sourceRoot":"","sources":["../src/PromoTile.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport PromoTileTemplate from \"./PromoTileTemplate.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { PROMO_TILE, PROMO_TILE_ICON } from \"./generated/i18n/i18n-defaults.js\";\nimport { BreakpointUtils } from \"./utils/Breakpoints.js\";\nimport type UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\nimport { UDExPromoTileColorScheme, UDExPromoTileMode } from \"./types/PromoTile.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport PromoTileCss from \"./generated/themes/PromoTile.css.js\";\n\nexport enum UDExOrientation {\n Vertical = \"Vertical\",\n Horizontal = \"Horizontal\",\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-promo-tile</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/PromoTile.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @tagname udex-promo-tile\n * @public\n */\n@customElement({\n tag: \"udex-promo-tile\",\n renderer: jsxRenderer,\n styles: PromoTileCss,\n template: PromoTileTemplate,\n})\n\n/**\n * Triggered when the user clicks on the CTA button\n *\n * @public\n */\n@event(\"button-click\", { cancelable: true, bubbles: true })\n\nclass UDExPromoTile extends UI5Element {\n eventDetails!: {\n \"button-click\": void,\n };\n\n /**\n * Defines the text content of the Promo Tile.\n *\n * @slot content\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true })\n content!: Array<HTMLElement>;\n\n /**\n * Defines the custom pictogram of the Promo Tile.\n *\n * @slot pictogram\n * @public\n */\n @slot({ type: HTMLElement })\n pictogram?: Array<HTMLElement>;\n\n /**\n * Allows control over setting the CSS gradient.\n *\n * @default undefined\n * @public\n */\n @property({ type: String })\n backgroundGradient?: string;\n\n /**\n * Defines the orientation of the Promo Tile component.\n *\n * @default \"Vertical\"\n * @public\n */\n @property()\n orientation: `${UDExOrientation}` = UDExOrientation.Vertical;\n\n /**\n * Defines the UI5 icon name in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n icon?: string;\n\n /**\n * Defines the image aria label and alt in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n imageLabel?: string;\n\n /**\n * Defines the logo URL in the pictogram section.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n logoUrl?: string;\n\n /**\n * Defines the header text of the promo tile.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n header?: string;\n\n /**\n * Defines the eyebrow text of the promo tile.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n eyebrow?: string;\n\n /**\n * Defines the CTA button label\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n button?: string;\n\n /**\n * Defines the CTA button design\n *\n * @default \"\"\n * @public\n */\n @property()\n buttonDesign?: UDExButtonDesign;\n\n /**\n * Defines the color scheme of the Promo Tile.\n *\n * @default \"\"\n * @public\n */\n @property()\n colorScheme?: UDExPromoTileColorScheme;\n\n /**\n * Defines the accessible name of the component.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n accessibleName?: string;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _handleResizeBound: ResizeObserverCallback;\n _button: UDExButton | undefined;\n _colorMode: UDExPromoTileMode = UDExPromoTileMode.light;\n _lightModeColors: Array<number> = [1, 2];\n _darkModeColors: Array<number> = [7, 8, 9, 10];\n _defaultBackgroundColor = \"#FFF\";\n\n constructor() {\n super();\n this._handleResizeBound = this._handleResize.bind(this);\n }\n\n onEnterDOM(): void {\n if (isDesktop()) {\n this.setAttribute(\"desktop\", \"\");\n }\n ResizeHandler.register(this, this._handleResizeBound);\n }\n\n onExitDOM(): void {\n ResizeHandler.deregister(this, this._handleResizeBound);\n }\n\n onAfterRendering() {\n this._button = this.getButton();\n this.applyColorScheme();\n }\n\n _handleResize(): void {\n if (this._button) {\n this._button.size = this.isMobile ? UDExButtonSize.Medium : UDExButtonSize.Large;\n }\n }\n\n getButton(): UDExButton | undefined {\n return this.shadowRoot!.querySelector<UDExButton>(\"[udex-button]\")!;\n }\n\n applyColorScheme(): void {\n if (!this.colorScheme) {\n return;\n }\n\n this._colorMode = this.checkColorMode(this.colorScheme);\n const eyebrowColor = this.checkEyebrowColor(this.colorScheme);\n\n if (this._colorMode === UDExPromoTileMode.dark) {\n if (this._button) {\n this._button.design = this.buttonDesign || UDExButtonDesign.Secondary;\n }\n this.style.setProperty(\"--udex-promo-tile-icon-fill-color\", `var(--udexCoreTextLight)`);\n }\n this.style.setProperty(\"--udex-promo-tile-background\", `var(--udexColor${this.colorScheme})`);\n this.style.setProperty(\"--udex-promo-tile-eyebrow-color\", `var(--udexColor${eyebrowColor})`);\n }\n\n getColorNumber(colorScheme: string): number {\n const match = colorScheme.match(/\\d+/);\n return match ? parseInt(match[0]) : 0;\n }\n\n checkColorMode(colorScheme: string): UDExPromoTileMode {\n const number = this.getColorNumber(colorScheme);\n\n if (number && this._darkModeColors.includes(number)) {\n return UDExPromoTileMode.dark;\n }\n return UDExPromoTileMode.light;\n }\n\n checkEyebrowColor(colorScheme: string): string {\n const number = this.getColorNumber(colorScheme);\n let color: string = UDExPromoTileColorScheme.Blue8;\n\n if (number === 7) {\n color = \"NeutralWhite\";\n } else if (this._darkModeColors.includes(number)) {\n color = colorScheme.replace(`${number}`, `${number - 7}`);\n } else if (this._lightModeColors.includes(number)) {\n color = colorScheme.replace(`${number}`, `${number + 7}`);\n }\n return color;\n }\n\n handleCTAButtonClick(e: Event) {\n e.preventDefault();\n this.fireDecoratorEvent(\"button-click\");\n }\n\n get isMobile(): boolean {\n return BreakpointUtils.isAtMost(\"S\");\n }\n\n get promoTileContainerText(): string {\n return this.accessibleName || this.header || translate(UDExPromoTile, PROMO_TILE);\n }\n\n get _showPictogram(): boolean {\n return !!this.icon || !!this.logoUrl || !!this.pictogram?.length;\n }\n\n get _showLogo(): boolean {\n return !this.icon && !!this.logoUrl;\n }\n\n get _imageLabel(): string {\n return this.imageLabel || translate(UDExPromoTile, PROMO_TILE_ICON);\n }\n}\n\nUDExPromoTile.define();\n\nexport default UDExPromoTile;\n"]}
@@ -6,7 +6,9 @@ import UDExButtonSize from "./types/ButtonSize.js";
6
6
  import UDExButtonAccessibleRole from "./types/ButtonAccessibleRole.js";
7
7
  export default function PromoTileTemplate() {
8
8
  const rootClass = "udex-promo-tile";
9
- return (_jsxs("div", { role: "region", class: `${rootClass}__container ${rootClass}--${this.orientation?.toLowerCase()} ${rootClass}--${this._colorMode}`, "aria-label": this.promoTileContainerText, children: [this._showPictogram &&
9
+ return (_jsxs("div", { role: "region", class: `${rootClass}__container ${rootClass}--${this.orientation?.toLowerCase()} ${rootClass}--${this._colorMode}`, "aria-label": this.promoTileContainerText, style: this.backgroundGradient
10
+ ? { backgroundImage: this.backgroundGradient, backgroundColor: this._defaultBackgroundColor }
11
+ : undefined, children: [this._showPictogram &&
10
12
  _jsx("div", { part: "image", class: {
11
13
  "udex-promo-tile__pictogram": true,
12
14
  "udex-promo-tile__pictogram--logo": this.logoUrl && !this.pictogram?.length
@@ -1 +1 @@
1
- {"version":3,"file":"PromoTileTemplate.js","sourceRoot":"","sources":["../src/PromoTileTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,iCAAiC,CAAC;AACtD,OAAO,QAAQ,MAAM,2CAA2C,CAAC;AACjE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,wBAAwB,MAAM,iCAAiC,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC;IAEpC,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,GAAG,SAAS,eAAe,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE,gBACtG,IAAI,CAAC,sBAAsB,aACtC,IAAI,CAAC,cAAc;gBAClB,cACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE;wBACL,4BAA4B,EAAE,IAAI;wBAClC,kCAAkC,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM;qBAC5E,EACD,KAAK,EAAE,IAAI,CAAC,WAAW,YACvB,gBAAM,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,WAAW,aACpC,IAAI,CAAC,IAAI;gCACR,KAAC,OAAO,IACN,KAAK,EAAE,GAAG,SAAS,QAAQ,EAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAC9B,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,cAAc,EAAE,IAAI,CAAC,WAAW,GACxB,EAEX,IAAI,CAAC,SAAS;gCACb,cACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,KAAK,EAAE,GAAG,SAAS,QAAQ,gBACf,IAAI,CAAC,WAAW,EAC5B,GAAG,EAAE,IAAI,CAAC,WAAW,GAAI,IAExB,GACH,EAER,eAAK,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,GAAG,SAAS,WAAW,aAChD,eAAK,KAAK,EAAE,GAAG,SAAS,QAAQ,aAC7B,IAAI,CAAC,OAAO;gCACX,cAAK,KAAK,EAAE,GAAG,SAAS,sBAAsB,YAAG,IAAI,CAAC,OAAO,GAAO,EAErE,IAAI,CAAC,MAAM;gCACV,cAAK,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,GAAG,SAAS,UAAU,YAAG,IAAI,CAAC,MAAM,GAAO,EAEvE,gBAAa,IACT,EACL,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IACjD,IACF,CACP,CAAC;AACJ,CAAC;AACD,SAAS,aAAa,CAAsB,SAAiB;IAC3D,OAAO,CACL,4BACE,cAAK,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,GAAG,SAAS,UAAU,YAC9C,KAAC,UAAU,IAAC,KAAK,EAAE,GAAG,SAAS,OAAO,EACpC,IAAI,EAAE,cAAc,CAAC,KAAK,EAC1B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,cAAc,EAAE,wBAAwB,CAAC,MAAM,YAC9C,IAAI,CAAC,MAAM,GACD,GACT,GACL,CACJ,CAAC;AACJ,CAAC","sourcesContent":["import type UDExPromoTile from \"./PromoTile.js\";\nimport UI5Icon from \"@ui5/webcomponents/dist/Icon.js\";\nimport IconMode from \"@ui5/webcomponents/dist/types/IconMode.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonAccessibleRole from \"./types/ButtonAccessibleRole.js\";\n\nexport default function PromoTileTemplate(this: UDExPromoTile) {\n const rootClass = \"udex-promo-tile\";\n\n return (\n <div\n role=\"region\"\n class={`${rootClass}__container ${rootClass}--${this.orientation?.toLowerCase()} ${rootClass}--${this._colorMode}`}\n aria-label={this.promoTileContainerText}>\n {this._showPictogram &&\n <div\n part=\"image\"\n class={{\n \"udex-promo-tile__pictogram\": true,\n \"udex-promo-tile__pictogram--logo\": this.logoUrl && !this.pictogram?.length\n }}\n title={this._imageLabel}>\n <slot slot=\"pictogram\" name=\"pictogram\">\n {this.icon &&\n <UI5Icon\n class={`${rootClass}__icon`}\n name={this.icon?.toLowerCase()}\n mode={IconMode.Decorative}\n accessibleName={this._imageLabel}>\n </UI5Icon>\n }\n {this._showLogo &&\n <img\n src={this.logoUrl}\n class={`${rootClass}__icon`}\n aria-label={this._imageLabel}\n alt={this._imageLabel} />\n }\n </slot>\n </div>\n }\n <div part=\"content\" class={`${rootClass}__content`}>\n <div class={`${rootClass}__text`}>\n {this.eyebrow &&\n <div class={`${rootClass}__eyebrow eyebrow--l`}>{this.eyebrow}</div>\n }\n {this.header &&\n <div part=\"header\" class={`${rootClass}__header`}>{this.header}</div>\n }\n <slot></slot>\n </div>\n {!!this.button && footerSection.call(this, rootClass)}\n </div>\n </div>\n );\n}\nfunction footerSection(this: UDExPromoTile, rootClass: string) {\n return (\n <>\n <div part=\"footer\" class={`${rootClass}__footer`}>\n <UDExButton class={`${rootClass}__btn`}\n size={UDExButtonSize.Large}\n design={this.buttonDesign}\n onClick={this.handleCTAButtonClick}\n accessibleRole={UDExButtonAccessibleRole.Button}>\n {this.button}\n </UDExButton>\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"PromoTileTemplate.js","sourceRoot":"","sources":["../src/PromoTileTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,iCAAiC,CAAC;AACtD,OAAO,QAAQ,MAAM,2CAA2C,CAAC;AACjE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,wBAAwB,MAAM,iCAAiC,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC;IAEpC,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,GAAG,SAAS,eAAe,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE,gBACtG,IAAI,CAAC,sBAAsB,EACvC,KAAK,EAAE,IAAI,CAAC,kBAAkB;YAC5B,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,EAAE,IAAI,CAAC,uBAAuB,EAAE;YAC7F,CAAC,CAAC,SAAS,aACZ,IAAI,CAAC,cAAc;gBAClB,cACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE;wBACL,4BAA4B,EAAE,IAAI;wBAClC,kCAAkC,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM;qBAC5E,EACD,KAAK,EAAE,IAAI,CAAC,WAAW,YACvB,gBAAM,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,WAAW,aACpC,IAAI,CAAC,IAAI;gCACR,KAAC,OAAO,IACN,KAAK,EAAE,GAAG,SAAS,QAAQ,EAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAC9B,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,cAAc,EAAE,IAAI,CAAC,WAAW,GACxB,EAEX,IAAI,CAAC,SAAS;gCACb,cACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,KAAK,EAAE,GAAG,SAAS,QAAQ,gBACf,IAAI,CAAC,WAAW,EAC5B,GAAG,EAAE,IAAI,CAAC,WAAW,GAAI,IAExB,GACH,EAER,eAAK,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,GAAG,SAAS,WAAW,aAChD,eAAK,KAAK,EAAE,GAAG,SAAS,QAAQ,aAC7B,IAAI,CAAC,OAAO;gCACX,cAAK,KAAK,EAAE,GAAG,SAAS,sBAAsB,YAAG,IAAI,CAAC,OAAO,GAAO,EAErE,IAAI,CAAC,MAAM;gCACV,cAAK,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,GAAG,SAAS,UAAU,YAAG,IAAI,CAAC,MAAM,GAAO,EAEvE,gBAAa,IACT,EACL,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IACjD,IACF,CACP,CAAC;AACJ,CAAC;AACD,SAAS,aAAa,CAAsB,SAAiB;IAC3D,OAAO,CACL,4BACE,cAAK,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,GAAG,SAAS,UAAU,YAC9C,KAAC,UAAU,IAAC,KAAK,EAAE,GAAG,SAAS,OAAO,EACpC,IAAI,EAAE,cAAc,CAAC,KAAK,EAC1B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,cAAc,EAAE,wBAAwB,CAAC,MAAM,YAC9C,IAAI,CAAC,MAAM,GACD,GACT,GACL,CACJ,CAAC;AACJ,CAAC","sourcesContent":["import type UDExPromoTile from \"./PromoTile.js\";\nimport UI5Icon from \"@ui5/webcomponents/dist/Icon.js\";\nimport IconMode from \"@ui5/webcomponents/dist/types/IconMode.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonAccessibleRole from \"./types/ButtonAccessibleRole.js\";\n\nexport default function PromoTileTemplate(this: UDExPromoTile) {\n const rootClass = \"udex-promo-tile\";\n\n return (\n <div\n role=\"region\"\n class={`${rootClass}__container ${rootClass}--${this.orientation?.toLowerCase()} ${rootClass}--${this._colorMode}`}\n aria-label={this.promoTileContainerText}\n style={this.backgroundGradient\n ? { backgroundImage: this.backgroundGradient, backgroundColor: this._defaultBackgroundColor }\n : undefined}>\n {this._showPictogram &&\n <div\n part=\"image\"\n class={{\n \"udex-promo-tile__pictogram\": true,\n \"udex-promo-tile__pictogram--logo\": this.logoUrl && !this.pictogram?.length\n }}\n title={this._imageLabel}>\n <slot slot=\"pictogram\" name=\"pictogram\">\n {this.icon &&\n <UI5Icon\n class={`${rootClass}__icon`}\n name={this.icon?.toLowerCase()}\n mode={IconMode.Decorative}\n accessibleName={this._imageLabel}>\n </UI5Icon>\n }\n {this._showLogo &&\n <img\n src={this.logoUrl}\n class={`${rootClass}__icon`}\n aria-label={this._imageLabel}\n alt={this._imageLabel} />\n }\n </slot>\n </div>\n }\n <div part=\"content\" class={`${rootClass}__content`}>\n <div class={`${rootClass}__text`}>\n {this.eyebrow &&\n <div class={`${rootClass}__eyebrow eyebrow--l`}>{this.eyebrow}</div>\n }\n {this.header &&\n <div part=\"header\" class={`${rootClass}__header`}>{this.header}</div>\n }\n <slot></slot>\n </div>\n {!!this.button && footerSection.call(this, rootClass)}\n </div>\n </div>\n );\n}\nfunction footerSection(this: UDExPromoTile, rootClass: string) {\n return (\n <>\n <div part=\"footer\" class={`${rootClass}__footer`}>\n <UDExButton class={`${rootClass}__btn`}\n size={UDExButtonSize.Large}\n design={this.buttonDesign}\n onClick={this.handleCTAButtonClick}\n accessibleRole={UDExButtonAccessibleRole.Button}>\n {this.button}\n </UDExButton>\n </div>\n </>\n );\n}\n"]}
@@ -45,12 +45,6 @@ declare class UDExReviewItem extends UI5Element {
45
45
  * @public
46
46
  */
47
47
  text: string;
48
- /**
49
- * Defines whether button for showing truncated text is shown.
50
- * @default 2
51
- * @private
52
- */
53
- _textLineLimit: number;
54
48
  /**
55
49
  * Defines whether the text is expanded.
56
50
  * @default false
@@ -83,6 +77,12 @@ declare class UDExReviewItem extends UI5Element {
83
77
  * @slot
84
78
  */
85
79
  date: Array<HTMLElement>;
80
+ /**
81
+ * Slot for custom content.
82
+ *
83
+ * @slot
84
+ */
85
+ content?: Array<HTMLElement>;
86
86
  static i18nBundle: I18nBundle;
87
87
  _handleResizeBound: ResizeObserverCallback;
88
88
  _textElement: HTMLElement;
@@ -94,11 +94,12 @@ declare class UDExReviewItem extends UI5Element {
94
94
  onEnterDOM(): void;
95
95
  onExitDOM(): void;
96
96
  onAfterRendering(): void;
97
+ _handleResize(): void;
97
98
  _toggleText(): void;
98
99
  _checkTextOverflow(): void;
100
+ get textElement(): HTMLElement;
99
101
  get buttonText(): string;
100
102
  get reviewItemClasses(): string;
101
103
  get validatedRating(): number;
102
- getTextElement(): HTMLElement;
103
104
  }
104
105
  export default UDExReviewItem;
@@ -13,7 +13,7 @@ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
13
13
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
14
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
15
15
  import ReviewItemTemplate from "./ReviewItemTemplate.js";
16
- import { READ_LESS, READ_MORE } from "./generated/i18n/i18n-defaults.js";
16
+ import { SHOW_LESS, SHOW_MORE } from "./generated/i18n/i18n-defaults.js";
17
17
  import translate from "./utils/translate.js";
18
18
  // Styles
19
19
  import ReviewItemCss from "./generated/themes/ReviewItem.css.js";
@@ -44,19 +44,12 @@ let UDExReviewItem = UDExReviewItem_1 = class UDExReviewItem extends UI5Element
44
44
  * @public
45
45
  */
46
46
  this.rating = 0;
47
- /**
48
- * Defines whether button for showing truncated text is shown.
49
- * @default 2
50
- * @private
51
- */
52
- this._textLineLimit = 2;
53
- this._maxHeight = 48;
47
+ this._maxHeight = 90;
54
48
  this._maxRating = 5;
55
49
  this._minRating = 0;
56
- this._handleResizeBound = this._checkTextOverflow.bind(this);
50
+ this._handleResizeBound = this._handleResize.bind(this);
57
51
  }
58
52
  onEnterDOM() {
59
- this._maxHeight = 48;
60
53
  this._completeText = this.text;
61
54
  ResizeHandler.register(this, this._handleResizeBound);
62
55
  }
@@ -64,42 +57,52 @@ let UDExReviewItem = UDExReviewItem_1 = class UDExReviewItem extends UI5Element
64
57
  ResizeHandler.deregister(this, this._handleResizeBound);
65
58
  }
66
59
  onAfterRendering() {
67
- this._textElement = this.getTextElement();
68
- this._checkTextOverflow();
60
+ this._textElement = this.textElement;
61
+ if (this.text) {
62
+ this._checkTextOverflow();
63
+ }
64
+ }
65
+ _handleResize() {
66
+ if (this.text) {
67
+ this._checkTextOverflow();
68
+ }
69
69
  }
70
70
  _toggleText() {
71
71
  this._textExpanded = !this._textExpanded;
72
- if (this._textExpanded) {
73
- this._completeText = this.text;
74
- this._textElement.classList.add("udex-review-item__text-expanded");
75
- }
76
- else {
77
- this._textElement.classList.remove("udex-review-item__text-expanded");
78
- this._completeText = this._visibleText;
79
- }
72
+ this._completeText = this._textExpanded ? this.text : this._visibleText;
73
+ this._textElement.classList.toggle("udex-review-item__text-expanded", this._textExpanded);
80
74
  }
81
75
  _checkTextOverflow() {
82
76
  const words = this.text.split(" ");
83
77
  const canvas = document.createElement("canvas");
84
78
  const context = canvas.getContext("2d");
85
- context.font = `16px sans-serif`;
86
- let currentLineWidth = 0;
79
+ context.font = "16px sans-serif";
80
+ const maxWidth = this._textElement.offsetWidth;
87
81
  let visibleText = "";
88
- words.forEach(word => {
89
- const wordWidth = context.measureText(`${word} `).width;
90
- if (currentLineWidth + wordWidth <= 2 * this._textElement.offsetWidth) {
91
- visibleText += `${word} `;
92
- currentLineWidth += wordWidth;
82
+ const lineHeight = 22; // Approximate line height for 16px font
83
+ for (let i = 0; i < words.length; i++) {
84
+ const testText = visibleText + (visibleText ? " " : "") + words[i];
85
+ const metrics = context.measureText(testText);
86
+ const textWidth = metrics.width;
87
+ const estimatedLines = Math.ceil(textWidth / maxWidth);
88
+ const estimatedHeight = estimatedLines * lineHeight;
89
+ if (estimatedHeight > this._maxHeight) {
90
+ break;
93
91
  }
94
- });
92
+ visibleText = testText;
93
+ }
95
94
  this._visibleText = visibleText;
96
95
  if (!this._textExpanded) {
97
96
  this._completeText = visibleText;
98
97
  }
99
98
  this._showTextExpander = (!this._textExpanded && this._completeText.length < this.text.length) || (this._textExpanded && visibleText.length < this.text.length);
100
99
  }
100
+ get textElement() {
101
+ const textElement = this.shadowRoot?.getElementById("udex-review-item__text");
102
+ return textElement;
103
+ }
101
104
  get buttonText() {
102
- return this._textExpanded ? translate(UDExReviewItem_1, READ_LESS) : translate(UDExReviewItem_1, READ_MORE);
105
+ return this._textExpanded ? translate(UDExReviewItem_1, SHOW_LESS) : translate(UDExReviewItem_1, SHOW_MORE);
103
106
  }
104
107
  get reviewItemClasses() {
105
108
  const ratingTop = this.showRatingTop ? " udex-review-item__rating-top" : "";
@@ -116,10 +119,6 @@ let UDExReviewItem = UDExReviewItem_1 = class UDExReviewItem extends UI5Element
116
119
  }
117
120
  return this.rating;
118
121
  }
119
- getTextElement() {
120
- const textElement = this.shadowRoot?.getElementById("udex-review-item__text");
121
- return textElement;
122
- }
123
122
  };
124
123
  __decorate([
125
124
  property({ type: Boolean })
@@ -133,9 +132,6 @@ __decorate([
133
132
  __decorate([
134
133
  property({ type: String })
135
134
  ], UDExReviewItem.prototype, "text", void 0);
136
- __decorate([
137
- property({ type: Number })
138
- ], UDExReviewItem.prototype, "_textLineLimit", void 0);
139
135
  __decorate([
140
136
  property({ type: Boolean })
141
137
  ], UDExReviewItem.prototype, "_textExpanded", void 0);
@@ -151,6 +147,9 @@ __decorate([
151
147
  __decorate([
152
148
  slot()
153
149
  ], UDExReviewItem.prototype, "date", void 0);
150
+ __decorate([
151
+ slot()
152
+ ], UDExReviewItem.prototype, "content", void 0);
154
153
  __decorate([
155
154
  i18n("@sapudex/web-components")
156
155
  ], UDExReviewItem, "i18nBundle", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewItem.js","sourceRoot":"","sources":["../src/ReviewItem.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ReviewItemTemplate from \"./ReviewItemTemplate.js\";\nimport { READ_LESS, READ_MORE } from \"./generated/i18n/i18n-defaults.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport ReviewItemCss from \"./generated/themes/ReviewItem.css.js\";\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-review-item</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/ReviewItem.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-review-item\",\n renderer: jsxRenderer,\n styles: ReviewItemCss,\n template: ReviewItemTemplate,\n})\n\nclass UDExReviewItem extends UI5Element {\n /**\n * Defines the position of the rating in review.\n * @default false\n * @public\n */\n @property({ type: Boolean })\n showRatingTop!: boolean;\n\n /**\n * Defines the rating in the review.\n *\n * @default 0\n * @public\n */\n @property({ type: Number })\n rating: number = 0;\n\n /**\n * Defines the title of the review.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n reviewTitle!: string;\n\n /**\n * Defines the text of the review.\n * @default \"\"\n * @public\n */\n @property({ type: String })\n text!: string;\n\n /**\n * Defines whether button for showing truncated text is shown.\n * @default 2\n * @private\n */\n @property({ type: Number })\n _textLineLimit: number = 2;\n\n /**\n * Defines whether the text is expanded.\n * @default false\n * @private\n */\n @property({ type: Boolean })\n _textExpanded!: boolean;\n\n /**\n * Defines whether button for showing truncated text is shown.\n * @default false\n * @private\n */\n @property({ type: Boolean })\n _showTextExpander!: boolean;\n\n /**\n * Defines the text, consisting of visible and invisible parts of the original text.\n * @default \"\"\n * @private\n */\n @property({ type: String })\n _completeText!: string;\n\n /**\n * Defines the author's name and company.\n *\n * @default \"\"\n * @slot\n */\n @slot()\n author!: Array<HTMLElement>;\n\n /**\n * Defines the date of the review.\n *\n * @default \"\"\n * @slot\n */\n @slot()\n date!: Array<HTMLElement>;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _handleResizeBound: ResizeObserverCallback;\n _textElement!: HTMLElement;\n _visibleText!: string;\n _maxHeight: number = 48;\n _maxRating: number = 5;\n _minRating: number = 0;\n\n constructor() {\n super();\n this._handleResizeBound = this._checkTextOverflow.bind(this);\n }\n\n onEnterDOM(): void {\n this._maxHeight = 48;\n this._completeText = this.text;\n ResizeHandler.register(this, this._handleResizeBound);\n }\n\n onExitDOM(): void {\n ResizeHandler.deregister(this, this._handleResizeBound);\n }\n\n onAfterRendering(): void {\n this._textElement = this.getTextElement();\n this._checkTextOverflow();\n }\n\n _toggleText() {\n this._textExpanded = !this._textExpanded;\n if (this._textExpanded) {\n this._completeText = this.text;\n this._textElement.classList.add(\"udex-review-item__text-expanded\");\n } else {\n this._textElement.classList.remove(\"udex-review-item__text-expanded\");\n this._completeText = this._visibleText;\n }\n }\n\n _checkTextOverflow() {\n const words = this.text.split(\" \");\n\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\")!;\n context.font = `16px sans-serif`;\n\n let currentLineWidth = 0;\n let visibleText = \"\";\n\n words.forEach(word => {\n const wordWidth = context.measureText(`${word} `).width;\n if (currentLineWidth + wordWidth <= 2 * this._textElement.offsetWidth) {\n visibleText += `${word} `;\n currentLineWidth += wordWidth;\n }\n });\n\n this._visibleText = visibleText;\n if (!this._textExpanded) {\n this._completeText = visibleText;\n }\n\n this._showTextExpander = (!this._textExpanded && this._completeText.length < this.text.length) || (this._textExpanded && visibleText.length < this.text.length);\n }\n\n get buttonText(): string {\n return this._textExpanded ? translate(UDExReviewItem, READ_LESS) : translate(UDExReviewItem, READ_MORE);\n }\n\n get reviewItemClasses(): string {\n const ratingTop = this.showRatingTop ? \" udex-review-item__rating-top\" : \"\";\n return `udex-review-item${ratingTop}`;\n }\n\n get validatedRating(): number {\n if (this.rating > this._maxRating) {\n console.warn(\"UDEx Review: The rating shouldn't be more than 5.\");\n return this._maxRating;\n }\n if (this.rating < this._minRating) {\n console.warn(\"UDEx Review: The rating shouldn't be less than 0.\");\n return this._minRating;\n }\n return this.rating;\n }\n\n getTextElement(): HTMLElement {\n const textElement = this.shadowRoot?.getElementById(\"udex-review-item__text\");\n return textElement!;\n }\n}\n\nUDExReviewItem.define();\n\nexport default UDExReviewItem;\n"]}
1
+ {"version":3,"file":"ReviewItem.js","sourceRoot":"","sources":["../src/ReviewItem.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ReviewItemTemplate from \"./ReviewItemTemplate.js\";\nimport { SHOW_LESS, SHOW_MORE } from \"./generated/i18n/i18n-defaults.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport ReviewItemCss from \"./generated/themes/ReviewItem.css.js\";\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-review-item</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/ReviewItem.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-review-item\",\n renderer: jsxRenderer,\n styles: ReviewItemCss,\n template: ReviewItemTemplate,\n})\n\nclass UDExReviewItem extends UI5Element {\n /**\n * Defines the position of the rating in review.\n * @default false\n * @public\n */\n @property({ type: Boolean })\n showRatingTop!: boolean;\n\n /**\n * Defines the rating in the review.\n *\n * @default 0\n * @public\n */\n @property({ type: Number })\n rating: number = 0;\n\n /**\n * Defines the title of the review.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n reviewTitle!: string;\n\n /**\n * Defines the text of the review.\n * @default \"\"\n * @public\n */\n @property({ type: String })\n text!: string;\n\n /**\n * Defines whether the text is expanded.\n * @default false\n * @private\n */\n @property({ type: Boolean })\n _textExpanded!: boolean;\n\n /**\n * Defines whether button for showing truncated text is shown.\n * @default false\n * @private\n */\n @property({ type: Boolean })\n _showTextExpander!: boolean;\n\n /**\n * Defines the text, consisting of visible and invisible parts of the original text.\n * @default \"\"\n * @private\n */\n @property({ type: String })\n _completeText!: string;\n\n /**\n * Defines the author's name and company.\n *\n * @default \"\"\n * @slot\n */\n @slot()\n author!: Array<HTMLElement>;\n\n /**\n * Defines the date of the review.\n *\n * @default \"\"\n * @slot\n */\n @slot()\n date!: Array<HTMLElement>;\n\n /**\n * Slot for custom content.\n *\n * @slot\n */\n @slot()\n content?: Array<HTMLElement>;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _handleResizeBound: ResizeObserverCallback;\n _textElement!: HTMLElement;\n _visibleText!: string;\n _maxHeight: number = 90;\n _maxRating: number = 5;\n _minRating: number = 0;\n\n constructor() {\n super();\n this._handleResizeBound = this._handleResize.bind(this);\n }\n\n onEnterDOM(): void {\n this._completeText = this.text;\n ResizeHandler.register(this, this._handleResizeBound);\n }\n\n onExitDOM(): void {\n ResizeHandler.deregister(this, this._handleResizeBound);\n }\n\n onAfterRendering(): void {\n this._textElement = this.textElement;\n if (this.text) {\n this._checkTextOverflow();\n }\n }\n\n _handleResize(): void {\n if (this.text) {\n this._checkTextOverflow();\n }\n }\n\n _toggleText() {\n this._textExpanded = !this._textExpanded;\n this._completeText = this._textExpanded ? this.text : this._visibleText;\n this._textElement.classList.toggle(\"udex-review-item__text-expanded\", this._textExpanded);\n }\n\n _checkTextOverflow() {\n const words = this.text.split(\" \");\n\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\")!;\n context.font = \"16px sans-serif\";\n\n const maxWidth = this._textElement.offsetWidth;\n let visibleText = \"\";\n const lineHeight = 22; // Approximate line height for 16px font\n\n for (let i = 0; i < words.length; i++) {\n const testText = visibleText + (visibleText ? \" \" : \"\") + words[i];\n const metrics = context.measureText(testText);\n const textWidth = metrics.width;\n\n const estimatedLines = Math.ceil(textWidth / maxWidth);\n const estimatedHeight = estimatedLines * lineHeight;\n\n if (estimatedHeight > this._maxHeight) {\n break;\n }\n\n visibleText = testText;\n }\n\n this._visibleText = visibleText;\n if (!this._textExpanded) {\n this._completeText = visibleText;\n }\n\n this._showTextExpander = (!this._textExpanded && this._completeText.length < this.text.length) || (this._textExpanded && visibleText.length < this.text.length);\n }\n\n get textElement(): HTMLElement {\n const textElement = this.shadowRoot?.getElementById(\"udex-review-item__text\");\n return textElement!;\n }\n\n get buttonText(): string {\n return this._textExpanded ? translate(UDExReviewItem, SHOW_LESS) : translate(UDExReviewItem, SHOW_MORE);\n }\n\n get reviewItemClasses(): string {\n const ratingTop = this.showRatingTop ? \" udex-review-item__rating-top\" : \"\";\n return `udex-review-item${ratingTop}`;\n }\n\n get validatedRating(): number {\n if (this.rating > this._maxRating) {\n console.warn(\"UDEx Review: The rating shouldn't be more than 5.\");\n return this._maxRating;\n }\n if (this.rating < this._minRating) {\n console.warn(\"UDEx Review: The rating shouldn't be less than 0.\");\n return this._minRating;\n }\n return this.rating;\n }\n}\n\nUDExReviewItem.define();\n\nexport default UDExReviewItem;\n"]}
@@ -5,6 +5,8 @@ import UDExButtonSize from "./types/ButtonSize.js";
5
5
  import UDExButtonDesign from "./types/ButtonDesign.js";
6
6
  export default function ReviewItemTemplate() {
7
7
  const rootClass = "udex-review-item";
8
- return (_jsxs("div", { className: this.reviewItemClasses, children: [_jsxs("div", { className: `${rootClass}__rating-container`, children: [_jsx(UDExRatingIndicator, { value: this.validatedRating, max: this._maxRating, readonly: true }), this.date && (_jsx("slot", { className: `${rootClass}__date`, slot: "date", name: "date" }))] }), _jsxs("div", { className: `${rootClass}__text-container`, children: [_jsx("div", { className: `${rootClass}__title`, children: this.reviewTitle }), _jsxs("div", { className: `${rootClass}__text-wrapper`, children: [_jsx("p", { className: `${rootClass}__text`, id: `${rootClass}__text`, children: this._completeText }), this._showTextExpander && (_jsx(UDExButton, { id: "reviewExpander", class: `${rootClass}__text-expander`, design: UDExButtonDesign.Invisible, size: UDExButtonSize.Large, onClick: this._toggleText.bind(this), children: this.buttonText }))] }), this.author && (_jsx("slot", { slot: "author", name: "author", className: `${rootClass}__author` }))] })] }));
8
+ return (_jsxs("div", { className: this.reviewItemClasses, children: [_jsxs("div", { className: `${rootClass}__rating-container`, children: [_jsx(UDExRatingIndicator, { value: this.validatedRating, max: this._maxRating, readonly: true }), this.date && (_jsx("slot", { className: `${rootClass}__date`, slot: "date", name: "date" }))] }), _jsxs("div", { className: `${rootClass}__text-container`, children: [this.reviewTitle &&
9
+ _jsx("div", { className: `${rootClass}__title`, children: this.reviewTitle }), _jsx("div", { className: `${rootClass}__text-wrapper`, children: _jsxs("slot", { slot: "content", name: "content", children: [_jsx("p", { className: `${rootClass}__text`, id: `${rootClass}__text`, children: this._completeText }), this._showTextExpander &&
10
+ _jsx(UDExButton, { id: "reviewExpander", class: `${rootClass}__text-expander`, design: UDExButtonDesign.Invisible, size: UDExButtonSize.Large, onClick: this._toggleText.bind(this), children: this.buttonText })] }) }), this.author && (_jsx("slot", { slot: "author", name: "author", className: `${rootClass}__author` }))] })] }));
9
11
  }
10
12
  //# sourceMappingURL=ReviewItemTemplate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewItemTemplate.js","sourceRoot":"","sources":["../src/ReviewItemTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,mBAAmB,MAAM,sBAAsB,CAAC;AACvD,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,SAAS,GAAG,kBAAkB,CAAC;IAErC,OAAO,CACL,eAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,aACpC,eAAK,SAAS,EAAE,GAAG,SAAS,oBAAoB,aAC9C,KAAC,mBAAmB,IAClB,KAAK,EAAE,IAAI,CAAC,eAAe,EAC3B,GAAG,EAAE,IAAI,CAAC,UAAU,EACpB,QAAQ,SACY,EACrB,IAAI,CAAC,IAAI,IAAI,CACZ,eACE,SAAS,EAAE,GAAG,SAAS,QAAQ,EAC/B,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,MAAM,GACN,CACR,IACG,EACN,eAAK,SAAS,EAAE,GAAG,SAAS,kBAAkB,aAC5C,cAAK,SAAS,EAAE,GAAG,SAAS,SAAS,YAAG,IAAI,CAAC,WAAW,GAAO,EAC/D,eAAK,SAAS,EAAE,GAAG,SAAS,gBAAgB,aAC1C,YAAG,SAAS,EAAE,GAAG,SAAS,QAAQ,EAAE,EAAE,EAAE,GAAG,SAAS,QAAQ,YACzD,IAAI,CAAC,aAAa,GACjB,EACH,IAAI,CAAC,iBAAiB,IAAI,CACzB,KAAC,UAAU,IACT,EAAE,EAAC,gBAAgB,EACnB,KAAK,EAAE,GAAG,SAAS,iBAAiB,EACpC,MAAM,EAAE,gBAAgB,CAAC,SAAS,EAClC,IAAI,EAAE,cAAc,CAAC,KAAK,EAC1B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YACnC,IAAI,CAAC,UAAU,GACL,CACd,IACG,EACL,IAAI,CAAC,MAAM,IAAI,CACd,eAAM,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,SAAS,UAAU,GAAS,CAC7E,IACG,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type ReviewItem from \"./ReviewItem.js\";\nimport UDExRatingIndicator from \"./RatingIndicator.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\n\nexport default function ReviewItemTemplate(this: ReviewItem) {\n const rootClass = \"udex-review-item\";\n\n return (\n <div className={this.reviewItemClasses}>\n <div className={`${rootClass}__rating-container`}>\n <UDExRatingIndicator\n value={this.validatedRating}\n max={this._maxRating}\n readonly>\n </UDExRatingIndicator>\n {this.date && (\n <slot\n className={`${rootClass}__date`}\n slot=\"date\"\n name=\"date\">\n </slot>\n )}\n </div>\n <div className={`${rootClass}__text-container`}>\n <div className={`${rootClass}__title`}>{this.reviewTitle}</div>\n <div className={`${rootClass}__text-wrapper`}>\n <p className={`${rootClass}__text`} id={`${rootClass}__text`}>\n {this._completeText}\n </p>\n {this._showTextExpander && (\n <UDExButton\n id=\"reviewExpander\"\n class={`${rootClass}__text-expander`}\n design={UDExButtonDesign.Invisible}\n size={UDExButtonSize.Large}\n onClick={this._toggleText.bind(this)}>\n {this.buttonText}\n </UDExButton>\n )}\n </div>\n {this.author && (\n <slot slot=\"author\" name=\"author\" className={`${rootClass}__author`}></slot>\n )}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ReviewItemTemplate.js","sourceRoot":"","sources":["../src/ReviewItemTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,mBAAmB,MAAM,sBAAsB,CAAC;AACvD,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,SAAS,GAAG,kBAAkB,CAAC;IAErC,OAAO,CACL,eAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,aACpC,eAAK,SAAS,EAAE,GAAG,SAAS,oBAAoB,aAC9C,KAAC,mBAAmB,IAClB,KAAK,EAAE,IAAI,CAAC,eAAe,EAC3B,GAAG,EAAE,IAAI,CAAC,UAAU,EACpB,QAAQ,SACY,EACrB,IAAI,CAAC,IAAI,IAAI,CACZ,eACE,SAAS,EAAE,GAAG,SAAS,QAAQ,EAC/B,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,MAAM,GACN,CACR,IACG,EACN,eAAK,SAAS,EAAE,GAAG,SAAS,kBAAkB,aAC3C,IAAI,CAAC,WAAW;wBACf,cAAK,SAAS,EAAE,GAAG,SAAS,SAAS,YAAG,IAAI,CAAC,WAAW,GAAO,EAEjE,cAAK,SAAS,EAAE,GAAG,SAAS,gBAAgB,YAC1C,gBAAM,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,aACjC,YAAG,SAAS,EAAE,GAAG,SAAS,QAAQ,EAAE,EAAE,EAAE,GAAG,SAAS,QAAQ,YAAG,IAAI,CAAC,aAAa,GAAK,EACrF,IAAI,CAAC,iBAAiB;oCACrB,KAAC,UAAU,IACT,EAAE,EAAC,gBAAgB,EACnB,KAAK,EAAE,GAAG,SAAS,iBAAiB,EACpC,MAAM,EAAE,gBAAgB,CAAC,SAAS,EAClC,IAAI,EAAE,cAAc,CAAC,KAAK,EAC1B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YACnC,IAAI,CAAC,UAAU,GACL,IAEV,GACH,EACL,IAAI,CAAC,MAAM,IAAI,CACd,eAAM,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,SAAS,UAAU,GAAS,CAC7E,IACG,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type ReviewItem from \"./ReviewItem.js\";\nimport UDExRatingIndicator from \"./RatingIndicator.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\n\nexport default function ReviewItemTemplate(this: ReviewItem) {\n const rootClass = \"udex-review-item\";\n\n return (\n <div className={this.reviewItemClasses}>\n <div className={`${rootClass}__rating-container`}>\n <UDExRatingIndicator\n value={this.validatedRating}\n max={this._maxRating}\n readonly>\n </UDExRatingIndicator>\n {this.date && (\n <slot\n className={`${rootClass}__date`}\n slot=\"date\"\n name=\"date\">\n </slot>\n )}\n </div>\n <div className={`${rootClass}__text-container`}>\n {this.reviewTitle &&\n <div className={`${rootClass}__title`}>{this.reviewTitle}</div>\n }\n <div className={`${rootClass}__text-wrapper`}>\n <slot slot=\"content\" name=\"content\">\n <p className={`${rootClass}__text`} id={`${rootClass}__text`}>{this._completeText}</p>\n {this._showTextExpander &&\n <UDExButton\n id=\"reviewExpander\"\n class={`${rootClass}__text-expander`}\n design={UDExButtonDesign.Invisible}\n size={UDExButtonSize.Large}\n onClick={this._toggleText.bind(this)}>\n {this.buttonText}\n </UDExButton>\n }\n </slot>\n </div>\n {this.author && (\n <slot slot=\"author\" name=\"author\" className={`${rootClass}__author`}></slot>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -155,6 +155,7 @@ declare class UDExSearchableListBase extends UI5Element {
155
155
  static i18nBundle: I18nBundle;
156
156
  _shouldFilterItems?: boolean;
157
157
  _accSearchResultInfo?: string;
158
+ _groupCollapseStateBeforeSearch: Map<string, boolean>;
158
159
  constructor();
159
160
  onBeforeRendering(): void;
160
161
  onItemPress(e: CustomEvent): void;
@@ -180,6 +181,8 @@ declare class UDExSearchableListBase extends UI5Element {
180
181
  isIncludes(string: string, value: string): boolean;
181
182
  revertSelectedItems(items: Array<UDExListItemBase>): void;
182
183
  syncFilteredItems(): void;
184
+ saveGroupCollapseState(): void;
185
+ restoreGroupCollapseState(): void;
183
186
  getSlottedItems(items: Array<UDExListItemBase | UDExListGroupHeaderBase>): Array<UDExListItemBase | UDExListGroupHeaderBase>;
184
187
  getItemFromList(itemId: string): UDExItemFromList;
185
188
  fireSelectionChange(itemId: string): void;
@@ -68,6 +68,7 @@ let UDExSearchableListBase = UDExSearchableListBase_1 = class UDExSearchableList
68
68
  this.defaultAccessibleRole = "list";
69
69
  this._shouldFilterItems = false;
70
70
  this._filteredItems = [];
71
+ this._groupCollapseStateBeforeSearch = new Map();
71
72
  }
72
73
  onBeforeRendering() {
73
74
  if (!this._shouldFilterItems) {
@@ -132,7 +133,14 @@ let UDExSearchableListBase = UDExSearchableListBase_1 = class UDExSearchableList
132
133
  }
133
134
  onSearch(value) {
134
135
  const searchValue = value;
135
- this._shouldFilterItems = true;
136
+ const hasSearchQuery = searchValue !== "";
137
+ if (hasSearchQuery && !this._shouldFilterItems) {
138
+ this.saveGroupCollapseState();
139
+ }
140
+ if (!hasSearchQuery && this._shouldFilterItems) {
141
+ this.restoreGroupCollapseState();
142
+ }
143
+ this._shouldFilterItems = hasSearchQuery;
136
144
  this._filteredItems = this.filterItems(this.getProcessedItems(), searchValue);
137
145
  const items = this.getFlattenItemsArray(this._filteredItems);
138
146
  this._accSearchResultInfo = items.length ? `${items.length} ${this.resultReturnedText}` : this.noMatchesFoundText;
@@ -157,13 +165,19 @@ let UDExSearchableListBase = UDExSearchableListBase_1 = class UDExSearchableList
157
165
  resetSearch() {
158
166
  const search = this.getSearch();
159
167
  search.value = "";
168
+ this._shouldFilterItems = false;
169
+ this.restoreGroupCollapseState();
160
170
  this._filteredItems = this.filterItems(this.getProcessedItems(), "");
161
171
  }
162
172
  filterItems(items, str) {
173
+ const hasSearchQuery = str !== "";
163
174
  return items.filter(preparedItem => {
164
175
  const { isGroup, item } = preparedItem;
165
176
  if (isGroup) {
166
177
  preparedItem.groupItems = this.filterItemsForLabel(preparedItem.groupItems, str);
178
+ if (hasSearchQuery && preparedItem.groupItems.length > 0) {
179
+ item.collapsed = false;
180
+ }
167
181
  return preparedItem.groupItems.length > 0;
168
182
  }
169
183
  return this.checkAndUpdateLabel(item, str);
@@ -210,6 +224,28 @@ let UDExSearchableListBase = UDExSearchableListBase_1 = class UDExSearchableList
210
224
  this._filteredItems = this.getProcessedItems();
211
225
  }
212
226
  }
227
+ saveGroupCollapseState() {
228
+ this._groupCollapseStateBeforeSearch.clear();
229
+ this.items.forEach(item => {
230
+ if (item.isGroup) {
231
+ this._groupCollapseStateBeforeSearch.set(item._id, Boolean(item.collapsed));
232
+ }
233
+ });
234
+ }
235
+ restoreGroupCollapseState() {
236
+ if (!this._groupCollapseStateBeforeSearch.size) {
237
+ return;
238
+ }
239
+ this.items.forEach(item => {
240
+ if (item.isGroup) {
241
+ const collapsed = this._groupCollapseStateBeforeSearch.get(item._id);
242
+ if (collapsed !== undefined) {
243
+ item.collapsed = collapsed;
244
+ }
245
+ }
246
+ });
247
+ this._groupCollapseStateBeforeSearch.clear();
248
+ }
213
249
  getSlottedItems(items) {
214
250
  const arr = [];
215
251
  items.forEach(item => {