@sapudex/web-components 2.48.0 → 2.49.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 (307) hide show
  1. package/bundle.esm.js +2 -0
  2. package/cypress/specs/AccordionSpotlight.cy.tsx +402 -0
  3. package/cypress/specs/BusyIndicator.cy.tsx +15 -0
  4. package/cypress/specs/Carousel.cy.tsx +142 -0
  5. package/cypress/specs/FilterMenu.cy.tsx +968 -10
  6. package/cypress/specs/List.cy.tsx +106 -0
  7. package/cypress/specs/ListItem.cy.tsx +291 -1
  8. package/cypress/specs/MediaPlayer.cy.tsx +32 -0
  9. package/cypress/specs/SelectBox.cy.tsx +134 -3
  10. package/cypress/support/component-imports.instrumented.ts +6 -0
  11. package/cypress/support/component-imports.src.ts +6 -0
  12. package/dist/AccordionSpotlight.d.ts +149 -0
  13. package/dist/AccordionSpotlight.js +284 -0
  14. package/dist/AccordionSpotlight.js.map +1 -0
  15. package/dist/AccordionSpotlightItem.d.ts +76 -0
  16. package/dist/AccordionSpotlightItem.js +115 -0
  17. package/dist/AccordionSpotlightItem.js.map +1 -0
  18. package/dist/AccordionSpotlightItemTemplate.d.ts +2 -0
  19. package/dist/AccordionSpotlightItemTemplate.js +5 -0
  20. package/dist/AccordionSpotlightItemTemplate.js.map +1 -0
  21. package/dist/AccordionSpotlightTemplate.d.ts +2 -0
  22. package/dist/AccordionSpotlightTemplate.js +10 -0
  23. package/dist/AccordionSpotlightTemplate.js.map +1 -0
  24. package/dist/BusyIndicator.d.ts +9 -0
  25. package/dist/BusyIndicator.js +7 -1
  26. package/dist/BusyIndicator.js.map +1 -1
  27. package/dist/Carousel.d.ts +26 -15
  28. package/dist/Carousel.js +71 -55
  29. package/dist/Carousel.js.map +1 -1
  30. package/dist/FilterMenu.d.ts +12 -2
  31. package/dist/FilterMenu.js +24 -4
  32. package/dist/FilterMenu.js.map +1 -1
  33. package/dist/FilterMenuTemplate.js +1 -1
  34. package/dist/FilterMenuTemplate.js.map +1 -1
  35. package/dist/List.d.ts +1 -0
  36. package/dist/List.js +24 -11
  37. package/dist/List.js.map +1 -1
  38. package/dist/ListGroupHeader.js +5 -1
  39. package/dist/ListGroupHeader.js.map +1 -1
  40. package/dist/ListGroupHeaderBase.d.ts +22 -0
  41. package/dist/ListGroupHeaderBase.js +44 -0
  42. package/dist/ListGroupHeaderBase.js.map +1 -1
  43. package/dist/ListItem.d.ts +4 -0
  44. package/dist/ListItem.js +32 -0
  45. package/dist/ListItem.js.map +1 -1
  46. package/dist/MediaPlayer.d.ts +2 -0
  47. package/dist/MediaPlayer.js +12 -0
  48. package/dist/MediaPlayer.js.map +1 -1
  49. package/dist/PromoTile.js +1 -1
  50. package/dist/PromoTile.js.map +1 -1
  51. package/dist/SearchableListBase.d.ts +10 -1
  52. package/dist/SearchableListBase.js +23 -7
  53. package/dist/SearchableListBase.js.map +1 -1
  54. package/dist/SearchableListBaseTemplate.js +3 -2
  55. package/dist/SearchableListBaseTemplate.js.map +1 -1
  56. package/dist/SelectBase.d.ts +14 -0
  57. package/dist/SelectBase.js +56 -3
  58. package/dist/SelectBase.js.map +1 -1
  59. package/dist/SelectBoxTemplate.js +1 -1
  60. package/dist/SelectBoxTemplate.js.map +1 -1
  61. package/dist/TabNavigation.d.ts +6 -0
  62. package/dist/TabNavigation.js +5 -0
  63. package/dist/TabNavigation.js.map +1 -1
  64. package/dist/assets/{InputSuggestions-BcK6O4Bk.js → InputSuggestions-DaB1A6jW.js} +1 -1
  65. package/dist/assets/{ListItemStandardExpandableTextTemplate-u600dmHC.js → ListItemStandardExpandableTextTemplate-Co4KQuVw.js} +1 -1
  66. package/dist/assets/{bundle-JYo3bV8v.css → bundle-CkxyEA8c.css} +1 -1
  67. package/dist/assets/{bundle.esm-C6Ie2WeI.js → bundle.esm-al3NYhoB.js} +241 -238
  68. package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +1 -0
  69. package/dist/assets/messagebundle_no-BZQfeWxT.js +1 -0
  70. package/dist/css/themes/Accordion.css +1 -1
  71. package/dist/css/themes/AccordionItem.css +1 -1
  72. package/dist/css/themes/AccordionSpotlight.css +1 -0
  73. package/dist/css/themes/AccordionSpotlightItem.css +1 -0
  74. package/dist/css/themes/Badge.css +1 -1
  75. package/dist/css/themes/BusyIndicator.css +1 -0
  76. package/dist/css/themes/Button.css +1 -1
  77. package/dist/css/themes/Divider.css +1 -1
  78. package/dist/css/themes/Dropdown.css +1 -1
  79. package/dist/css/themes/FilterMenu.css +1 -1
  80. package/dist/css/themes/Footer.css +1 -1
  81. package/dist/css/themes/ImageGridTableItem.css +1 -1
  82. package/dist/css/themes/MastheadShell.css +1 -1
  83. package/dist/css/themes/MediaPlayer.css +1 -1
  84. package/dist/css/themes/PhoneNumberField.css +1 -1
  85. package/dist/css/themes/ProgressBar.css +1 -1
  86. package/dist/css/themes/PromoTile.css +1 -1
  87. package/dist/css/themes/Review.css +1 -1
  88. package/dist/css/themes/ReviewItem.css +1 -1
  89. package/dist/css/themes/Search.css +1 -1
  90. package/dist/css/themes/SelectBase.css +1 -1
  91. package/dist/css/themes/SelectBox.css +1 -1
  92. package/dist/css/themes/SideNavigation.css +1 -1
  93. package/dist/css/themes/SideNavigationGroup.css +1 -1
  94. package/dist/css/themes/SocialMediaButton.css +1 -1
  95. package/dist/css/themes/StepInput.css +1 -1
  96. package/dist/css/themes/Switch.css +1 -1
  97. package/dist/css/themes/TabNavigation.css +1 -1
  98. package/dist/css/themes/Tag.css +1 -1
  99. package/dist/css/themes/TagGroup.css +1 -1
  100. package/dist/css/themes/TextArea.css +1 -1
  101. package/dist/css/themes/TextField.css +1 -1
  102. package/dist/css/themes/Toast.css +1 -1
  103. package/dist/custom-elements-internal.json +426 -35
  104. package/dist/custom-elements.json +384 -49
  105. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  107. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +24 -21
  108. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  109. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  110. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  111. package/dist/generated/themes/Accordion.css.d.ts +1 -1
  112. package/dist/generated/themes/Accordion.css.js +1 -1
  113. package/dist/generated/themes/Accordion.css.js.map +1 -1
  114. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  115. package/dist/generated/themes/AccordionItem.css.js +1 -1
  116. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  117. package/dist/generated/themes/AccordionSpotlight.css.d.ts +2 -0
  118. package/dist/generated/themes/AccordionSpotlight.css.js +8 -0
  119. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -0
  120. package/dist/generated/themes/AccordionSpotlightItem.css.d.ts +2 -0
  121. package/dist/generated/themes/AccordionSpotlightItem.css.js +8 -0
  122. package/dist/generated/themes/AccordionSpotlightItem.css.js.map +1 -0
  123. package/dist/generated/themes/Badge.css.d.ts +1 -1
  124. package/dist/generated/themes/Badge.css.js +1 -1
  125. package/dist/generated/themes/Badge.css.js.map +1 -1
  126. package/dist/generated/themes/BusyIndicator.css.d.ts +2 -0
  127. package/dist/generated/themes/BusyIndicator.css.js +8 -0
  128. package/dist/generated/themes/BusyIndicator.css.js.map +1 -0
  129. package/dist/generated/themes/Button.css.d.ts +1 -1
  130. package/dist/generated/themes/Button.css.js +1 -1
  131. package/dist/generated/themes/Button.css.js.map +1 -1
  132. package/dist/generated/themes/Divider.css.d.ts +1 -1
  133. package/dist/generated/themes/Divider.css.js +1 -1
  134. package/dist/generated/themes/Divider.css.js.map +1 -1
  135. package/dist/generated/themes/Dropdown.css.d.ts +1 -1
  136. package/dist/generated/themes/Dropdown.css.js +1 -1
  137. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  138. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  139. package/dist/generated/themes/FilterMenu.css.js +1 -1
  140. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  141. package/dist/generated/themes/Footer.css.d.ts +1 -1
  142. package/dist/generated/themes/Footer.css.js +1 -1
  143. package/dist/generated/themes/Footer.css.js.map +1 -1
  144. package/dist/generated/themes/ImageGridTableItem.css.d.ts +1 -1
  145. package/dist/generated/themes/ImageGridTableItem.css.js +1 -1
  146. package/dist/generated/themes/ImageGridTableItem.css.js.map +1 -1
  147. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  148. package/dist/generated/themes/MastheadShell.css.js +1 -1
  149. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  150. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  151. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  152. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  153. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  154. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  155. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  156. package/dist/generated/themes/ProgressBar.css.d.ts +1 -1
  157. package/dist/generated/themes/ProgressBar.css.js +1 -1
  158. package/dist/generated/themes/ProgressBar.css.js.map +1 -1
  159. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  160. package/dist/generated/themes/PromoTile.css.js +1 -1
  161. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  162. package/dist/generated/themes/Review.css.d.ts +1 -1
  163. package/dist/generated/themes/Review.css.js +1 -1
  164. package/dist/generated/themes/Review.css.js.map +1 -1
  165. package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
  166. package/dist/generated/themes/ReviewItem.css.js +1 -1
  167. package/dist/generated/themes/ReviewItem.css.js.map +1 -1
  168. package/dist/generated/themes/Search.css.d.ts +1 -1
  169. package/dist/generated/themes/Search.css.js +1 -1
  170. package/dist/generated/themes/Search.css.js.map +1 -1
  171. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  172. package/dist/generated/themes/SelectBase.css.js +1 -1
  173. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  174. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  175. package/dist/generated/themes/SelectBox.css.js +1 -1
  176. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  177. package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
  178. package/dist/generated/themes/SideNavigation.css.js +1 -1
  179. package/dist/generated/themes/SideNavigation.css.js.map +1 -1
  180. package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
  181. package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
  182. package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
  183. package/dist/generated/themes/SocialMediaButton.css.d.ts +1 -1
  184. package/dist/generated/themes/SocialMediaButton.css.js +1 -1
  185. package/dist/generated/themes/SocialMediaButton.css.js.map +1 -1
  186. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  187. package/dist/generated/themes/StepInput.css.js +1 -1
  188. package/dist/generated/themes/StepInput.css.js.map +1 -1
  189. package/dist/generated/themes/Switch.css.d.ts +1 -1
  190. package/dist/generated/themes/Switch.css.js +1 -1
  191. package/dist/generated/themes/Switch.css.js.map +1 -1
  192. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  193. package/dist/generated/themes/TabNavigation.css.js +1 -1
  194. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  195. package/dist/generated/themes/Tag.css.d.ts +1 -1
  196. package/dist/generated/themes/Tag.css.js +1 -1
  197. package/dist/generated/themes/Tag.css.js.map +1 -1
  198. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  199. package/dist/generated/themes/TagGroup.css.js +1 -1
  200. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  201. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  202. package/dist/generated/themes/TextArea.css.js +1 -1
  203. package/dist/generated/themes/TextArea.css.js.map +1 -1
  204. package/dist/generated/themes/TextField.css.d.ts +1 -1
  205. package/dist/generated/themes/TextField.css.js +1 -1
  206. package/dist/generated/themes/TextField.css.js.map +1 -1
  207. package/dist/generated/themes/Toast.css.d.ts +1 -1
  208. package/dist/generated/themes/Toast.css.js +1 -1
  209. package/dist/generated/themes/Toast.css.js.map +1 -1
  210. package/dist/messagebundle_ar.properties +99 -0
  211. package/dist/messagebundle_no.properties +126 -1
  212. package/dist/vscode.html-custom-data.json +76 -11
  213. package/dist/web-types.json +194 -26
  214. package/package.json +1 -1
  215. package/src/AccordionSpotlight.ts +321 -0
  216. package/src/AccordionSpotlightItem.ts +117 -0
  217. package/src/AccordionSpotlightItemTemplate.tsx +7 -0
  218. package/src/AccordionSpotlightTemplate.tsx +107 -0
  219. package/src/BusyIndicator.ts +17 -2
  220. package/src/Carousel.ts +118 -80
  221. package/src/FilterMenu.ts +25 -4
  222. package/src/FilterMenuTemplate.tsx +1 -1
  223. package/src/List.ts +23 -11
  224. package/src/ListGroupHeader.hbs +11 -10
  225. package/src/ListGroupHeader.ts +5 -1
  226. package/src/ListGroupHeaderBase.ts +48 -0
  227. package/src/ListItem.hbs +5 -1
  228. package/src/ListItem.ts +36 -0
  229. package/src/MediaPlayer.ts +11 -0
  230. package/src/PromoTile.ts +1 -1
  231. package/src/SearchableListBase.ts +24 -7
  232. package/src/SearchableListBaseTemplate.tsx +5 -2
  233. package/src/SelectBase.ts +58 -3
  234. package/src/SelectBoxTemplate.tsx +1 -0
  235. package/src/TabNavigation.ts +6 -0
  236. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +24 -21
  237. package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
  238. package/src/generated/themes/Accordion.css.ts +1 -1
  239. package/src/generated/themes/AccordionItem.css.ts +1 -1
  240. package/src/generated/themes/AccordionSpotlight.css.ts +9 -0
  241. package/src/generated/themes/AccordionSpotlightItem.css.ts +9 -0
  242. package/src/generated/themes/Badge.css.ts +1 -1
  243. package/src/generated/themes/BusyIndicator.css.ts +9 -0
  244. package/src/generated/themes/Button.css.ts +1 -1
  245. package/src/generated/themes/Divider.css.ts +1 -1
  246. package/src/generated/themes/Dropdown.css.ts +1 -1
  247. package/src/generated/themes/FilterMenu.css.ts +1 -1
  248. package/src/generated/themes/Footer.css.ts +1 -1
  249. package/src/generated/themes/ImageGridTableItem.css.ts +1 -1
  250. package/src/generated/themes/MastheadShell.css.ts +1 -1
  251. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  252. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  253. package/src/generated/themes/ProgressBar.css.ts +1 -1
  254. package/src/generated/themes/PromoTile.css.ts +1 -1
  255. package/src/generated/themes/Review.css.ts +1 -1
  256. package/src/generated/themes/ReviewItem.css.ts +1 -1
  257. package/src/generated/themes/Search.css.ts +1 -1
  258. package/src/generated/themes/SelectBase.css.ts +1 -1
  259. package/src/generated/themes/SelectBox.css.ts +1 -1
  260. package/src/generated/themes/SideNavigation.css.ts +1 -1
  261. package/src/generated/themes/SideNavigationGroup.css.ts +1 -1
  262. package/src/generated/themes/SocialMediaButton.css.ts +1 -1
  263. package/src/generated/themes/StepInput.css.ts +1 -1
  264. package/src/generated/themes/Switch.css.ts +1 -1
  265. package/src/generated/themes/TabNavigation.css.ts +1 -1
  266. package/src/generated/themes/Tag.css.ts +1 -1
  267. package/src/generated/themes/TagGroup.css.ts +1 -1
  268. package/src/generated/themes/TextArea.css.ts +1 -1
  269. package/src/generated/themes/TextField.css.ts +1 -1
  270. package/src/generated/themes/Toast.css.ts +1 -1
  271. package/src/i18n/messagebundle_ar.properties +99 -0
  272. package/src/i18n/messagebundle_no.properties +126 -1
  273. package/src/themes/Accordion.css +1 -1
  274. package/src/themes/AccordionItem.css +4 -4
  275. package/src/themes/AccordionSpotlight.css +264 -0
  276. package/src/themes/AccordionSpotlightItem.css +3 -0
  277. package/src/themes/Badge.css +7 -7
  278. package/src/themes/BusyIndicator.css +24 -0
  279. package/src/themes/Button.css +57 -57
  280. package/src/themes/Divider.css +1 -1
  281. package/src/themes/Dropdown.css +1 -1
  282. package/src/themes/FilterMenu.css +2 -2
  283. package/src/themes/Footer.css +1 -1
  284. package/src/themes/ImageGridTableItem.css +1 -1
  285. package/src/themes/MastheadShell.css +2 -2
  286. package/src/themes/MediaPlayer.css +5 -34
  287. package/src/themes/PhoneNumberField.css +6 -6
  288. package/src/themes/ProgressBar.css +4 -0
  289. package/src/themes/PromoTile.css +4 -4
  290. package/src/themes/Review.css +2 -2
  291. package/src/themes/ReviewItem.css +2 -2
  292. package/src/themes/Search.css +5 -5
  293. package/src/themes/SelectBase.css +14 -14
  294. package/src/themes/SelectBox.css +1 -1
  295. package/src/themes/SideNavigation.css +1 -1
  296. package/src/themes/SideNavigationGroup.css +1 -1
  297. package/src/themes/SocialMediaButton.css +2 -2
  298. package/src/themes/StepInput.css +8 -8
  299. package/src/themes/Switch.css +9 -9
  300. package/src/themes/TabNavigation.css +1 -1
  301. package/src/themes/Tag.css +4 -4
  302. package/src/themes/TagGroup.css +1 -0
  303. package/src/themes/TextArea.css +4 -4
  304. package/src/themes/TextField.css +13 -13
  305. package/src/themes/Toast.css +1 -1
  306. package/dist/assets/messagebundle_ar-BNhVFt1-.js +0 -1
  307. package/dist/assets/messagebundle_no-BIUfmTWJ.js +0 -1
@@ -0,0 +1,284 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
8
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
11
+ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
+ import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
14
+ import AccordionSpotlightTemplate from "./AccordionSpotlightTemplate.js";
15
+ import AccordionSpotlightItem from "./AccordionSpotlightItem.js";
16
+ import UDExButton from "./Button.js";
17
+ import "@ui5/webcomponents-icons/dist/play.js";
18
+ import "@ui5/webcomponents-icons/dist/pause.js";
19
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
20
+ import { BreakpointUtils } from "./utils/Breakpoints.js";
21
+ // Styles
22
+ import AccordionSpotlightCss from "./generated/themes/AccordionSpotlight.css.js";
23
+ export var UDExAccordionSpotlightVerticalAlignment;
24
+ (function (UDExAccordionSpotlightVerticalAlignment) {
25
+ UDExAccordionSpotlightVerticalAlignment["Top"] = "Top";
26
+ UDExAccordionSpotlightVerticalAlignment["Center"] = "Center";
27
+ })(UDExAccordionSpotlightVerticalAlignment || (UDExAccordionSpotlightVerticalAlignment = {}));
28
+ export var UDExAccordionSpotlightPlacement;
29
+ (function (UDExAccordionSpotlightPlacement) {
30
+ UDExAccordionSpotlightPlacement["Start"] = "Start";
31
+ UDExAccordionSpotlightPlacement["End"] = "End";
32
+ })(UDExAccordionSpotlightPlacement || (UDExAccordionSpotlightPlacement = {}));
33
+ export var UDExAccordionSpotlightMediaMode;
34
+ (function (UDExAccordionSpotlightMediaMode) {
35
+ UDExAccordionSpotlightMediaMode["Dynamic"] = "Dynamic";
36
+ UDExAccordionSpotlightMediaMode["Static"] = "Static";
37
+ })(UDExAccordionSpotlightMediaMode || (UDExAccordionSpotlightMediaMode = {}));
38
+ /**
39
+ * @class
40
+ *
41
+ * <h3 class="comment-api-title">Overview</h3>
42
+ *
43
+ * Vertical accordion navigation with spotlight layout. Items are listed on the
44
+ * left; the expanded panel is displayed on the right (desktop) or inline below
45
+ * the heading (mobile). Follows the WAI-ARIA APG Accordion pattern.
46
+ *
47
+ * <h3>Usage</h3>
48
+ *
49
+ * For the <code>udex-accordion-spotlight</code>
50
+ * <h3>ES6 Module Import</h3>
51
+ *
52
+ * <code>import "@sapudex/web-components/dist/AccordionSpotlight.js";</code>
53
+ *
54
+ * @constructor
55
+ * @extends UI5Element
56
+ * @public
57
+ */
58
+ let UDExAccordionSpotlight = class UDExAccordionSpotlight extends UI5Element {
59
+ constructor() {
60
+ super();
61
+ /**
62
+ * The index of the currently expanded item (0-based).
63
+ * Derived from items' <code>selected</code> attribute; kept in sync by the parent.
64
+ *
65
+ * @private
66
+ */
67
+ this._selectedIndex = 0;
68
+ /**
69
+ * Vertical alignment of the navigation sidebar relative to the content panel.
70
+ *
71
+ * @default "Top"
72
+ * @public
73
+ */
74
+ this.verticalAlignment = UDExAccordionSpotlightVerticalAlignment.Top;
75
+ /**
76
+ * Placement of the navigation sidebar — "Start" (left) or "End" (right).
77
+ *
78
+ * @default "Start"
79
+ * @public
80
+ */
81
+ this.placement = UDExAccordionSpotlightPlacement.Start;
82
+ /**
83
+ * Enables automatic cycling through items on an interval.
84
+ *
85
+ * @default false
86
+ * @public
87
+ */
88
+ this.autoPlay = false;
89
+ /**
90
+ * Interval in milliseconds between automatic item advances. Applies only when autoPlay is enabled.
91
+ *
92
+ * @default 5000
93
+ * @public
94
+ */
95
+ this.autoPlayInterval = 5000;
96
+ /**
97
+ * Defines the width of the navigation panel.
98
+ *
99
+ * @default "auto"
100
+ * @public
101
+ */
102
+ this.tabWidth = "auto";
103
+ /**
104
+ * Controls how the media area behaves. In <code>Static</code> mode a single
105
+ * persistent media element (image or video) is displayed alongside the nav
106
+ * list and never changes when items are expanded. In <code>Dynamic</code>
107
+ * mode (default) each item provides its own content panel.
108
+ *
109
+ * @default "Dynamic"
110
+ * @public
111
+ */
112
+ this.mediaMode = UDExAccordionSpotlightMediaMode.Dynamic;
113
+ /**
114
+ * @private
115
+ */
116
+ this._isMobile = false;
117
+ /**
118
+ * @private
119
+ */
120
+ this._isPaused = false;
121
+ this._handleResizeBound = this._handleResize.bind(this);
122
+ }
123
+ onBeforeRendering() {
124
+ this._syncItemStates();
125
+ }
126
+ onAfterRendering() {
127
+ this._checkMobile();
128
+ }
129
+ onEnterDOM() {
130
+ ResizeHandler.register(this, this._handleResizeBound);
131
+ if (isDesktop()) {
132
+ this.setAttribute("desktop", "");
133
+ }
134
+ if (this.autoPlay) {
135
+ const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
136
+ if (prefersReducedMotion) {
137
+ this._isPaused = true;
138
+ }
139
+ else {
140
+ this._startAutoPlay();
141
+ }
142
+ }
143
+ }
144
+ onExitDOM() {
145
+ ResizeHandler.deregister(this, this._handleResizeBound);
146
+ this._stopAutoPlay();
147
+ }
148
+ _handleResize() {
149
+ this._checkMobile();
150
+ }
151
+ _checkMobile() {
152
+ const isMobile = BreakpointUtils.isAtMost("S");
153
+ if (isMobile !== this._isMobile) {
154
+ this._isMobile = isMobile;
155
+ }
156
+ }
157
+ _syncItemStates() {
158
+ if (this.items.length === 0) {
159
+ return;
160
+ }
161
+ const foundIndex = this.items.findIndex(item => item.selected);
162
+ const activeIndex = foundIndex === -1 ? 0 : foundIndex;
163
+ this._selectedIndex = activeIndex;
164
+ this.items.forEach((item, index) => {
165
+ item.selected = index === activeIndex;
166
+ item._isMobile = this._isMobile;
167
+ });
168
+ }
169
+ _startAutoPlay() {
170
+ this._stopAutoPlay();
171
+ this._isPaused = false;
172
+ this._autoPlayTimer = window.setInterval(() => {
173
+ this._advanceItem();
174
+ }, this.autoPlayInterval);
175
+ }
176
+ _stopAutoPlay() {
177
+ if (this._autoPlayTimer !== undefined) {
178
+ window.clearInterval(this._autoPlayTimer);
179
+ this._autoPlayTimer = undefined;
180
+ }
181
+ }
182
+ _advanceItem() {
183
+ const count = this.items.length;
184
+ if (count === 0) {
185
+ return;
186
+ }
187
+ const next = (this._selectedIndex + 1) % count;
188
+ this._selectItem(next);
189
+ }
190
+ onPlayButtonClick() {
191
+ if (this._isPaused) {
192
+ this._startAutoPlay();
193
+ }
194
+ else {
195
+ this._stopAutoPlay();
196
+ this._isPaused = true;
197
+ }
198
+ }
199
+ handleNavItemClick(e) {
200
+ const btn = e.target.closest("[data-index]");
201
+ if (!btn) {
202
+ return;
203
+ }
204
+ const index = Number.parseInt(btn.dataset.index);
205
+ this._selectItem(index);
206
+ }
207
+ _selectItem(index) {
208
+ if (index === this._selectedIndex) {
209
+ return;
210
+ }
211
+ this._selectedIndex = index;
212
+ this.items.forEach((item, i) => { item.selected = i === index; });
213
+ const item = this.items[index];
214
+ this.fireDecoratorEvent("item-click", { item });
215
+ }
216
+ get playBtnIcon() {
217
+ return this._isPaused ? "play" : "pause";
218
+ }
219
+ get showFooterSlot() {
220
+ return this.footer?.length > 0;
221
+ }
222
+ get isStaticMedia() {
223
+ return this.mediaMode === UDExAccordionSpotlightMediaMode.Static;
224
+ }
225
+ get showMediaSlot() {
226
+ return this.isStaticMedia && this.media?.length > 0;
227
+ }
228
+ };
229
+ __decorate([
230
+ property({ type: Number, noAttribute: true })
231
+ ], UDExAccordionSpotlight.prototype, "_selectedIndex", void 0);
232
+ __decorate([
233
+ property()
234
+ ], UDExAccordionSpotlight.prototype, "verticalAlignment", void 0);
235
+ __decorate([
236
+ property()
237
+ ], UDExAccordionSpotlight.prototype, "placement", void 0);
238
+ __decorate([
239
+ property({ type: Boolean })
240
+ ], UDExAccordionSpotlight.prototype, "autoPlay", void 0);
241
+ __decorate([
242
+ property({ type: Number })
243
+ ], UDExAccordionSpotlight.prototype, "autoPlayInterval", void 0);
244
+ __decorate([
245
+ property({ type: String })
246
+ ], UDExAccordionSpotlight.prototype, "tabWidth", void 0);
247
+ __decorate([
248
+ property()
249
+ ], UDExAccordionSpotlight.prototype, "mediaMode", void 0);
250
+ __decorate([
251
+ property({ type: Boolean, noAttribute: true })
252
+ ], UDExAccordionSpotlight.prototype, "_isMobile", void 0);
253
+ __decorate([
254
+ property({ type: Boolean, noAttribute: true })
255
+ ], UDExAccordionSpotlight.prototype, "_isPaused", void 0);
256
+ __decorate([
257
+ slot({ type: HTMLElement, "default": true, individualSlots: true })
258
+ ], UDExAccordionSpotlight.prototype, "items", void 0);
259
+ __decorate([
260
+ slot({ type: HTMLElement })
261
+ ], UDExAccordionSpotlight.prototype, "footer", void 0);
262
+ __decorate([
263
+ slot({ type: HTMLElement })
264
+ ], UDExAccordionSpotlight.prototype, "media", void 0);
265
+ UDExAccordionSpotlight = __decorate([
266
+ customElement({
267
+ tag: "udex-accordion-spotlight",
268
+ renderer: jsxRenderer,
269
+ styles: AccordionSpotlightCss,
270
+ template: AccordionSpotlightTemplate,
271
+ dependencies: [AccordionSpotlightItem, UDExButton],
272
+ })
273
+ /**
274
+ * Fired when the expanded item clicked.
275
+ *
276
+ * @public
277
+ * @param {AccordionSpotlightItem} [item] The accordion spotlight item that was clicked
278
+ */
279
+ ,
280
+ event("item-click", { bubbles: true })
281
+ ], UDExAccordionSpotlight);
282
+ UDExAccordionSpotlight.define();
283
+ export default UDExAccordionSpotlight;
284
+ //# sourceMappingURL=AccordionSpotlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionSpotlight.js","sourceRoot":"","sources":["../src/AccordionSpotlight.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 type { DefaultSlot, Slot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport AccordionSpotlightTemplate from \"./AccordionSpotlightTemplate.js\";\nimport AccordionSpotlightItem from \"./AccordionSpotlightItem.js\";\nimport UDExButton from \"./Button.js\";\nimport \"@ui5/webcomponents-icons/dist/play.js\";\nimport \"@ui5/webcomponents-icons/dist/pause.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport { BreakpointUtils } from \"./utils/Breakpoints.js\";\n\n// Styles\nimport AccordionSpotlightCss from \"./generated/themes/AccordionSpotlight.css.js\";\n\nexport enum UDExAccordionSpotlightVerticalAlignment {\n Top = \"Top\",\n Center = \"Center\",\n}\n\nexport enum UDExAccordionSpotlightPlacement {\n Start = \"Start\",\n End = \"End\",\n}\n\nexport enum UDExAccordionSpotlightMediaMode {\n Dynamic = \"Dynamic\",\n Static = \"Static\",\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n * Vertical accordion navigation with spotlight layout. Items are listed on the\n * left; the expanded panel is displayed on the right (desktop) or inline below\n * the heading (mobile). Follows the WAI-ARIA APG Accordion pattern.\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion-spotlight</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/AccordionSpotlight.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-accordion-spotlight\",\n renderer: jsxRenderer,\n styles: AccordionSpotlightCss,\n template: AccordionSpotlightTemplate,\n dependencies: [AccordionSpotlightItem, UDExButton],\n})\n\n/**\n * Fired when the expanded item clicked.\n *\n * @public\n * @param {AccordionSpotlightItem} [item] The accordion spotlight item that was clicked\n */\n@event(\"item-click\", { bubbles: true })\n\nclass UDExAccordionSpotlight extends UI5Element {\n eventDetails!: {\n \"item-click\": { item: AccordionSpotlightItem },\n };\n\n /**\n * The index of the currently expanded item (0-based).\n * Derived from items' <code>selected</code> attribute; kept in sync by the parent.\n *\n * @private\n */\n @property({ type: Number, noAttribute: true })\n _selectedIndex: number = 0;\n\n /**\n * Vertical alignment of the navigation sidebar relative to the content panel.\n *\n * @default \"Top\"\n * @public\n */\n @property()\n verticalAlignment: `${UDExAccordionSpotlightVerticalAlignment}` = UDExAccordionSpotlightVerticalAlignment.Top;\n\n /**\n * Placement of the navigation sidebar — \"Start\" (left) or \"End\" (right).\n *\n * @default \"Start\"\n * @public\n */\n @property()\n placement: `${UDExAccordionSpotlightPlacement}` = UDExAccordionSpotlightPlacement.Start;\n\n /**\n * Enables automatic cycling through items on an interval.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n autoPlay: boolean = false;\n\n /**\n * Interval in milliseconds between automatic item advances. Applies only when autoPlay is enabled.\n *\n * @default 5000\n * @public\n */\n @property({ type: Number })\n autoPlayInterval: number = 5000;\n\n /**\n * Defines the width of the navigation panel.\n *\n * @default \"auto\"\n * @public\n */\n @property({ type: String })\n tabWidth: string = \"auto\";\n\n /**\n * Controls how the media area behaves. In <code>Static</code> mode a single\n * persistent media element (image or video) is displayed alongside the nav\n * list and never changes when items are expanded. In <code>Dynamic</code>\n * mode (default) each item provides its own content panel.\n *\n * @default \"Dynamic\"\n * @public\n */\n @property()\n mediaMode: `${UDExAccordionSpotlightMediaMode}` = UDExAccordionSpotlightMediaMode.Dynamic;\n\n /**\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isMobile: boolean = false;\n\n /**\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isPaused: boolean = false;\n\n /**\n * The slotted AccordionSpotlightItem elements.\n *\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true, individualSlots: true })\n items!: DefaultSlot<AccordionSpotlightItem>;\n\n /**\n * Defines optional content rendered below the navigation items.\n * Use to place a button or any action element beneath the items.\n *\n * @slot footer\n * @public\n */\n @slot({ type: HTMLElement })\n footer!: Slot<HTMLElement>;\n\n /**\n * Persistent media area shown in <code>Static</code> media mode.\n * Place an <code>&lt;img&gt;</code> or <code>&lt;video&gt;</code> element here;\n * it remains visible regardless of which item is currently expanded.\n *\n * @slot media\n * @public\n */\n @slot({ type: HTMLElement })\n media!: Slot<HTMLElement>;\n\n _handleResizeBound: ResizeObserverCallback;\n _autoPlayTimer?: number;\n\n constructor() {\n super();\n this._handleResizeBound = this._handleResize.bind(this);\n }\n\n onBeforeRendering() {\n this._syncItemStates();\n }\n\n onAfterRendering() {\n this._checkMobile();\n }\n\n onEnterDOM() {\n ResizeHandler.register(this, this._handleResizeBound);\n\n if (isDesktop()) {\n this.setAttribute(\"desktop\", \"\");\n }\n\n if (this.autoPlay) {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (prefersReducedMotion) {\n this._isPaused = true;\n } else {\n this._startAutoPlay();\n }\n }\n }\n\n onExitDOM() {\n ResizeHandler.deregister(this, this._handleResizeBound);\n this._stopAutoPlay();\n }\n\n _handleResize(): void {\n this._checkMobile();\n }\n\n _checkMobile() {\n const isMobile = BreakpointUtils.isAtMost(\"S\");\n if (isMobile !== this._isMobile) {\n this._isMobile = isMobile;\n }\n }\n\n _syncItemStates() {\n if (this.items.length === 0) {\n return;\n }\n\n const foundIndex = this.items.findIndex(item => item.selected);\n const activeIndex = foundIndex === -1 ? 0 : foundIndex;\n this._selectedIndex = activeIndex;\n\n this.items.forEach((item, index) => {\n item.selected = index === activeIndex;\n item._isMobile = this._isMobile;\n });\n }\n\n _startAutoPlay(): void {\n this._stopAutoPlay();\n this._isPaused = false;\n this._autoPlayTimer = window.setInterval(() => {\n this._advanceItem();\n }, this.autoPlayInterval);\n }\n\n _stopAutoPlay(): void {\n if (this._autoPlayTimer !== undefined) {\n window.clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = undefined;\n }\n }\n\n _advanceItem(): void {\n const count = this.items.length;\n if (count === 0) {\n return;\n }\n\n const next = (this._selectedIndex + 1) % count;\n this._selectItem(next);\n }\n\n onPlayButtonClick(): void {\n if (this._isPaused) {\n this._startAutoPlay();\n } else {\n this._stopAutoPlay();\n this._isPaused = true;\n }\n }\n\n handleNavItemClick(e: MouseEvent) {\n const btn = (e.target as HTMLElement).closest<HTMLElement>(\"[data-index]\");\n if (!btn) {\n return;\n }\n const index = Number.parseInt(btn.dataset.index!);\n this._selectItem(index);\n }\n\n private _selectItem(index: number) {\n if (index === this._selectedIndex) {\n return;\n }\n\n this._selectedIndex = index;\n this.items.forEach((item, i) => { item.selected = i === index; });\n const item = this.items[index];\n this.fireDecoratorEvent(\"item-click\", { item });\n }\n\n get playBtnIcon(): string {\n return this._isPaused ? \"play\" : \"pause\";\n }\n\n get showFooterSlot(): boolean {\n return this.footer?.length > 0;\n }\n\n get isStaticMedia(): boolean {\n return this.mediaMode === UDExAccordionSpotlightMediaMode.Static;\n }\n\n get showMediaSlot(): boolean {\n return this.isStaticMedia && this.media?.length > 0;\n }\n}\n\nUDExAccordionSpotlight.define();\n\nexport default UDExAccordionSpotlight;\n"]}
@@ -0,0 +1,76 @@
1
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
+ /**
4
+ * @class
5
+ *
6
+ * <h3 class="comment-api-title">Overview</h3>
7
+ *
8
+ * A single item within the <code>udex-accordion-spotlight</code> component.
9
+ * Provides a heading button (<code>aria-expanded</code>) and an associated
10
+ * content region (<code>role="region"</code>).
11
+ *
12
+ * <h3>Usage</h3>
13
+ *
14
+ * For the <code>udex-accordion-spotlight-item</code>
15
+ * <h3>ES6 Module Import</h3>
16
+ *
17
+ * <code>import "@sapudex/web-components/dist/AccordionSpotlightItem.js";</code>
18
+ *
19
+ * @constructor
20
+ * @extends UI5Element
21
+ * @public
22
+ */
23
+ declare class UDExAccordionSpotlightItem extends UI5Element {
24
+ /**
25
+ * The label text shown in the heading button.
26
+ *
27
+ * @default ""
28
+ * @public
29
+ */
30
+ heading: string;
31
+ /**
32
+ * Optional descriptive subtext visible when the item is expanded.
33
+ *
34
+ * @default ""
35
+ * @public
36
+ */
37
+ subheading: string;
38
+ /**
39
+ * Whether this item is currently expanded.
40
+ * Set on the element directly to control the initial selection.
41
+ *
42
+ * @default false
43
+ * @public
44
+ */
45
+ selected: boolean;
46
+ /**
47
+ * Whether the parent is in mobile layout mode (managed by the parent component).
48
+ *
49
+ * @default false
50
+ * @private
51
+ */
52
+ _isMobile: boolean;
53
+ /**
54
+ * Zero-based index within the parent (managed by the parent component).
55
+ *
56
+ * @private
57
+ */
58
+ _index: number;
59
+ /**
60
+ * The slotted content for this item's panel.
61
+ *
62
+ * @public
63
+ */
64
+ content: DefaultSlot<Node>;
65
+ /**
66
+ * Defines the link(s) to be displayed in the tab header (vertical orientation only).
67
+ * Use this slot to add one or more udex-link elements to the tab button.
68
+ *
69
+ * @slot link
70
+ * @public
71
+ */
72
+ link: Slot<HTMLElement>;
73
+ get hasLinkSlot(): boolean;
74
+ get linkSlotHtml(): string;
75
+ }
76
+ export default UDExAccordionSpotlightItem;
@@ -0,0 +1,115 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
8
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
9
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
10
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
11
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
12
+ import AccordionSpotlightItemTemplate from "./AccordionSpotlightItemTemplate.js";
13
+ // Styles
14
+ import AccordionSpotlightItemCss from "./generated/themes/AccordionSpotlightItem.css.js";
15
+ /**
16
+ * @class
17
+ *
18
+ * <h3 class="comment-api-title">Overview</h3>
19
+ *
20
+ * A single item within the <code>udex-accordion-spotlight</code> component.
21
+ * Provides a heading button (<code>aria-expanded</code>) and an associated
22
+ * content region (<code>role="region"</code>).
23
+ *
24
+ * <h3>Usage</h3>
25
+ *
26
+ * For the <code>udex-accordion-spotlight-item</code>
27
+ * <h3>ES6 Module Import</h3>
28
+ *
29
+ * <code>import "@sapudex/web-components/dist/AccordionSpotlightItem.js";</code>
30
+ *
31
+ * @constructor
32
+ * @extends UI5Element
33
+ * @public
34
+ */
35
+ let UDExAccordionSpotlightItem = class UDExAccordionSpotlightItem extends UI5Element {
36
+ constructor() {
37
+ super(...arguments);
38
+ /**
39
+ * The label text shown in the heading button.
40
+ *
41
+ * @default ""
42
+ * @public
43
+ */
44
+ this.heading = "";
45
+ /**
46
+ * Optional descriptive subtext visible when the item is expanded.
47
+ *
48
+ * @default ""
49
+ * @public
50
+ */
51
+ this.subheading = "";
52
+ /**
53
+ * Whether this item is currently expanded.
54
+ * Set on the element directly to control the initial selection.
55
+ *
56
+ * @default false
57
+ * @public
58
+ */
59
+ this.selected = false;
60
+ /**
61
+ * Whether the parent is in mobile layout mode (managed by the parent component).
62
+ *
63
+ * @default false
64
+ * @private
65
+ */
66
+ this._isMobile = false;
67
+ /**
68
+ * Zero-based index within the parent (managed by the parent component).
69
+ *
70
+ * @private
71
+ */
72
+ this._index = 0;
73
+ }
74
+ get hasLinkSlot() {
75
+ return this.link && this.link.length > 0;
76
+ }
77
+ get linkSlotHtml() {
78
+ if (!this.link || this.link.length === 0) {
79
+ return "";
80
+ }
81
+ return this.link.map(l => l.outerHTML).join("");
82
+ }
83
+ };
84
+ __decorate([
85
+ property()
86
+ ], UDExAccordionSpotlightItem.prototype, "heading", void 0);
87
+ __decorate([
88
+ property()
89
+ ], UDExAccordionSpotlightItem.prototype, "subheading", void 0);
90
+ __decorate([
91
+ property({ type: Boolean })
92
+ ], UDExAccordionSpotlightItem.prototype, "selected", void 0);
93
+ __decorate([
94
+ property({ type: Boolean, noAttribute: true })
95
+ ], UDExAccordionSpotlightItem.prototype, "_isMobile", void 0);
96
+ __decorate([
97
+ property({ type: Number, noAttribute: true })
98
+ ], UDExAccordionSpotlightItem.prototype, "_index", void 0);
99
+ __decorate([
100
+ slot({ type: Node, "default": true })
101
+ ], UDExAccordionSpotlightItem.prototype, "content", void 0);
102
+ __decorate([
103
+ slot({ type: HTMLElement })
104
+ ], UDExAccordionSpotlightItem.prototype, "link", void 0);
105
+ UDExAccordionSpotlightItem = __decorate([
106
+ customElement({
107
+ tag: "udex-accordion-spotlight-item",
108
+ renderer: jsxRenderer,
109
+ styles: AccordionSpotlightItemCss,
110
+ template: AccordionSpotlightItemTemplate,
111
+ })
112
+ ], UDExAccordionSpotlightItem);
113
+ UDExAccordionSpotlightItem.define();
114
+ export default UDExAccordionSpotlightItem;
115
+ //# sourceMappingURL=AccordionSpotlightItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionSpotlightItem.js","sourceRoot":"","sources":["../src/AccordionSpotlightItem.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AAEpE,OAAO,IAAI,MAAM,wDAAwD,CAAC;AAC1E,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,OAAO,8BAA8B,MAAM,qCAAqC,CAAC;AAEjF,SAAS;AACT,OAAO,yBAAyB,MAAM,kDAAkD,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,UAAU;IAAnD;;QACE;;;;;WAKG;QAED,YAAO,GAAW,EAAE,CAAC;QAEvB;;;;;WAKG;QAED,eAAU,GAAW,EAAE,CAAC;QAE1B;;;;;;WAMG;QAED,aAAQ,GAAY,KAAK,CAAC;QAE5B;;;;;WAKG;QAED,cAAS,GAAY,KAAK,CAAC;QAE7B;;;;WAIG;QAED,WAAM,GAAW,CAAC,CAAC;IA8BvB,CAAC;IAVC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,YAAY;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AAlEG;IADD,QAAQ,EAAE;2DACY;AASrB;IADD,QAAQ,EAAE;8DACe;AAUxB;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4DACA;AAS1B;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;6DAClB;AAQ3B;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;0DACzB;AAQnB;IADD,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;2DACR;AAU5B;IADD,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;wDACD;AA9DvB,0BAA0B;IAN/B,aAAa,CAAC;QACb,GAAG,EAAE,+BAA+B;QACpC,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE,8BAA8B;KACzC,CAAC;GACI,0BAA0B,CA0E/B;AAED,0BAA0B,CAAC,MAAM,EAAE,CAAC;AAEpC,eAAe,0BAA0B,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot, Slot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.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/dist/renderer/JsxRenderer.js\";\n\nimport AccordionSpotlightItemTemplate from \"./AccordionSpotlightItemTemplate.js\";\n\n// Styles\nimport AccordionSpotlightItemCss from \"./generated/themes/AccordionSpotlightItem.css.js\";\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n * A single item within the <code>udex-accordion-spotlight</code> component.\n * Provides a heading button (<code>aria-expanded</code>) and an associated\n * content region (<code>role=\"region\"</code>).\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion-spotlight-item</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/AccordionSpotlightItem.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-accordion-spotlight-item\",\n renderer: jsxRenderer,\n styles: AccordionSpotlightItemCss,\n template: AccordionSpotlightItemTemplate,\n})\nclass UDExAccordionSpotlightItem extends UI5Element {\n /**\n * The label text shown in the heading button.\n *\n * @default \"\"\n * @public\n */\n @property()\n heading: string = \"\";\n\n /**\n * Optional descriptive subtext visible when the item is expanded.\n *\n * @default \"\"\n * @public\n */\n @property()\n subheading: string = \"\";\n\n /**\n * Whether this item is currently expanded.\n * Set on the element directly to control the initial selection.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n selected: boolean = false;\n\n /**\n * Whether the parent is in mobile layout mode (managed by the parent component).\n *\n * @default false\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isMobile: boolean = false;\n\n /**\n * Zero-based index within the parent (managed by the parent component).\n *\n * @private\n */\n @property({ type: Number, noAttribute: true })\n _index: number = 0;\n\n /**\n * The slotted content for this item's panel.\n *\n * @public\n */\n @slot({ type: Node, \"default\": true })\n content!: DefaultSlot<Node>;\n\n /**\n * Defines the link(s) to be displayed in the tab header (vertical orientation only).\n * Use this slot to add one or more udex-link elements to the tab button.\n *\n * @slot link\n * @public\n */\n @slot({ type: HTMLElement })\n link!: Slot<HTMLElement>;\n\n get hasLinkSlot(): boolean {\n return this.link && this.link.length > 0;\n }\n\n get linkSlotHtml(): string {\n if (!this.link || this.link.length === 0) {\n return \"\";\n }\n return this.link.map(l => l.outerHTML).join(\"\");\n }\n}\n\nUDExAccordionSpotlightItem.define();\n\nexport default UDExAccordionSpotlightItem;\n"]}
@@ -0,0 +1,2 @@
1
+ import type AccordionSpotlightItem from "./AccordionSpotlightItem.js";
2
+ export default function AccordionSpotlightItemTemplate(this: AccordionSpotlightItem): import("@ui5/webcomponents-base").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "@ui5/webcomponents-base/jsx-runtime";
2
+ export default function AccordionSpotlightItemTemplate() {
3
+ return (_jsx("slot", {}));
4
+ }
5
+ //# sourceMappingURL=AccordionSpotlightItemTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionSpotlightItemTemplate.js","sourceRoot":"","sources":["../src/AccordionSpotlightItemTemplate.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,UAAU,8BAA8B;IACpD,OAAO,CACL,gBAAa,CACd,CAAC;AACJ,CAAC","sourcesContent":["import type AccordionSpotlightItem from \"./AccordionSpotlightItem.js\";\n\nexport default function AccordionSpotlightItemTemplate(this: AccordionSpotlightItem) {\n return (\n <slot></slot>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type AccordionSpotlight from "./AccordionSpotlight.js";
2
+ export default function AccordionSpotlightTemplate(this: AccordionSpotlight): import("@ui5/webcomponents-base").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import UDExButton from "./Button.js";
3
+ import UDExButtonSize from "./types/ButtonSize.js";
4
+ import UDExButtonDesign from "./types/ButtonDesign.js";
5
+ export default function AccordionSpotlightTemplate() {
6
+ const rootClass = "udex-accordion-spotlight";
7
+ return (_jsxs("div", { class: `${rootClass}`, children: [_jsxs("div", { class: `${rootClass}__nav`, children: [this.autoPlay && (_jsx(UDExButton, { class: `${rootClass}__play-button`, design: UDExButtonDesign.Tertiary, size: UDExButtonSize.Large, icon: this.playBtnIcon, onClick: this.onPlayButtonClick.bind(this) })), _jsx("div", { class: `${rootClass}__nav-holder`, children: this.items.map((item, index) => (_jsxs(_Fragment, { children: [_jsxs("div", { class: `${rootClass}__nav-item`, children: [_jsx("button", { id: item._id, class: `${rootClass}-item__button ${item.selected ? ` ${rootClass}-item__button--active` : ""}`, type: "button", "aria-expanded": item.selected, "aria-controls": `${item._id}-controls`, "data-index": String(index), onClick: this.handleNavItemClick.bind(this), children: item.heading }), (!!item.subheading || item.hasLinkSlot) && (_jsx("div", { class: `${rootClass}-item__expand${item.selected ? ` ${rootClass}-item__expand--open` : ""}`, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsxs("div", { class: `${rootClass}-item__expand-inner`, children: [!!item.subheading && (_jsx("span", { class: `${rootClass}-item__subheading`, children: item.subheading })), item.hasLinkSlot &&
8
+ _jsx("div", { class: `${rootClass}-item__links`, dangerouslySetInnerHTML: { __html: item.linkSlotHtml } })] }) }))] }), this._isMobile && !this.isStaticMedia && (_jsx("div", { id: `${item._id}-controls`, class: `${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : ""}`, role: "region", "aria-labelledby": item._id, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsx("div", { class: `${rootClass}__panel-inner`, children: _jsx("slot", { name: item._individualSlot }) }) }))] }))) }), this.showFooterSlot && (_jsx("div", { class: `${rootClass}__footer`, children: _jsx("slot", { name: "footer" }) }))] }), this.showMediaSlot && (_jsx("div", { class: `${rootClass}__media`, children: _jsx("slot", { name: "media" }) })), !this._isMobile && !this.isStaticMedia && (_jsx("div", { class: `${rootClass}__content`, children: this.items.map(item => (_jsx("div", { id: `${item._id}-controls`, class: `${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : ""}`, role: "region", "aria-labelledby": item._id, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsx("div", { class: `${rootClass}__panel-inner`, children: _jsx("slot", { name: item._individualSlot }) }) }, item.__id))) }))] }));
9
+ }
10
+ //# sourceMappingURL=AccordionSpotlightTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionSpotlightTemplate.js","sourceRoot":"","sources":["../src/AccordionSpotlightTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import type AccordionSpotlight from \"./AccordionSpotlight.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\n\nexport default function AccordionSpotlightTemplate(this: AccordionSpotlight) {\n const rootClass = \"udex-accordion-spotlight\";\n\n return (\n <div class={`${rootClass}`}>\n <div\n class={`${rootClass}__nav`}>\n {this.autoPlay && (\n <UDExButton\n class={`${rootClass}__play-button`}\n design={UDExButtonDesign.Tertiary}\n size={UDExButtonSize.Large}\n icon={this.playBtnIcon}\n onClick={this.onPlayButtonClick.bind(this)}\n />\n )}\n\n <div class={`${rootClass}__nav-holder`}>\n {this.items.map((item, index) => (\n <>\n <div class={`${rootClass}__nav-item`}>\n <button\n id={item._id}\n class={`${rootClass}-item__button ${item.selected ? ` ${rootClass}-item__button--active` : \"\"}`}\n type=\"button\"\n aria-expanded={item.selected}\n aria-controls={`${item._id}-controls`}\n data-index={String(index)}\n onClick={this.handleNavItemClick.bind(this)}>\n {item.heading}\n </button>\n\n {(!!item.subheading || item.hasLinkSlot) && (\n <div\n class={`${rootClass}-item__expand${item.selected ? ` ${rootClass}-item__expand--open` : \"\"}`}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}-item__expand-inner`}>\n {!!item.subheading && (\n <span class={`${rootClass}-item__subheading`}>\n {item.subheading}\n </span>\n )}\n {item.hasLinkSlot &&\n <div\n class={`${rootClass}-item__links`}\n dangerouslySetInnerHTML={{ __html: item.linkSlotHtml }}>\n </div>\n }\n </div>\n </div>\n )}\n </div>\n\n {this._isMobile && !this.isStaticMedia && (\n <div\n id={`${item._id}-controls`}\n class={`${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : \"\"}`}\n role=\"region\"\n aria-labelledby={item._id}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}__panel-inner`}>\n <slot name={item._individualSlot}></slot>\n </div>\n </div>\n )}\n </>\n ))}\n </div>\n {this.showFooterSlot && (\n <div class={`${rootClass}__footer`}><slot name=\"footer\"></slot></div>\n )}\n </div>\n\n {this.showMediaSlot && (\n <div class={`${rootClass}__media`}>\n <slot name=\"media\"></slot>\n </div>\n )}\n\n {!this._isMobile && !this.isStaticMedia && (\n <div class={`${rootClass}__content`}>\n {this.items.map(item => (\n <div\n key={item.__id}\n id={`${item._id}-controls`}\n class={`${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : \"\"}`}\n role=\"region\"\n aria-labelledby={item._id}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}__panel-inner`}>\n <slot name={item._individualSlot}></slot>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -18,5 +18,14 @@ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
18
18
  * @public
19
19
  */
20
20
  declare class UDExBusyIndicator extends BusyIndicator {
21
+ /**
22
+ * Renders the busy indicator inside a surface container — a semi-transparent backdrop
23
+ * with a white rounded card holding the indicator dots. Use this when the indicator
24
+ * overlays content where the dots alone would not meet accessibility contrast requirements.
25
+ *
26
+ * @default false
27
+ * @public
28
+ */
29
+ surfaceContainer: boolean;
21
30
  }
22
31
  export default UDExBusyIndicator;
@@ -5,8 +5,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
8
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
8
9
  import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
9
10
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
11
+ // Styles
12
+ import BusyIndicatorCss from "./generated/themes/BusyIndicator.css.js";
10
13
  /**
11
14
  * @class
12
15
  *
@@ -27,11 +30,14 @@ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
27
30
  */
28
31
  let UDExBusyIndicator = class UDExBusyIndicator extends BusyIndicator {
29
32
  };
33
+ __decorate([
34
+ property({ type: Boolean })
35
+ ], UDExBusyIndicator.prototype, "surfaceContainer", void 0);
30
36
  UDExBusyIndicator = __decorate([
31
37
  customElement({
32
38
  tag: "udex-busy-indicator",
33
39
  renderer: jsxRenderer,
34
- styles: [BusyIndicator.styles],
40
+ styles: [BusyIndicator.styles, BusyIndicatorCss],
35
41
  })
36
42
  ], UDExBusyIndicator);
37
43
  UDExBusyIndicator.define();
@@ -1 +1 @@
1
- {"version":3,"file":"BusyIndicator.js","sourceRoot":"","sources":["../src/BusyIndicator.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E;;;;;;;;;;;;;;;;;GAiBG;AAOH,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;CAAG,CAAA;AAA1C,iBAAiB;IANtB,aAAa,CAAC;QACb,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;KAC/B,CAAC;GAEI,iBAAiB,CAAyB;AAEhD,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAE3B,eAAe,iBAAiB,CAAC","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.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-busy-indicator</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/BusyIndicator.js\";</code>\n *\n * @constructor\n * @extends BusyIndicator\n * @tagname udex-busy-indicator\n * @public\n */\n@customElement({\n tag: \"udex-busy-indicator\",\n renderer: jsxRenderer,\n styles: [BusyIndicator.styles],\n})\n\nclass UDExBusyIndicator extends BusyIndicator {}\n\nUDExBusyIndicator.define();\n\nexport default UDExBusyIndicator;\n"]}
1
+ {"version":3,"file":"BusyIndicator.js","sourceRoot":"","sources":["../src/BusyIndicator.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,SAAS;AACT,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AAEvE;;;;;;;;;;;;;;;;;GAiBG;AAOH,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;CAW5C,CAAA;AADG;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2DACC;AAVzB,iBAAiB;IANtB,aAAa,CAAC;QACb,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC;KACjD,CAAC;GAEI,iBAAiB,CAWtB;AAED,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAE3B,eAAe,iBAAiB,CAAC","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\n// Styles\nimport BusyIndicatorCss from \"./generated/themes/BusyIndicator.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-busy-indicator</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/BusyIndicator.js\";</code>\n *\n * @constructor\n * @extends BusyIndicator\n * @tagname udex-busy-indicator\n * @public\n */\n@customElement({\n tag: \"udex-busy-indicator\",\n renderer: jsxRenderer,\n styles: [BusyIndicator.styles, BusyIndicatorCss],\n})\n\nclass UDExBusyIndicator extends BusyIndicator {\n /**\n * Renders the busy indicator inside a surface container — a semi-transparent backdrop\n * with a white rounded card holding the indicator dots. Use this when the indicator\n * overlays content where the dots alone would not meet accessibility contrast requirements.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n surfaceContainer!: boolean;\n}\n\nUDExBusyIndicator.define();\n\nexport default UDExBusyIndicator;\n"]}