@sapudex/web-components 2.47.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 (396) 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/DatePicker.cy.tsx +62 -0
  6. package/cypress/specs/FilterMenu.cy.tsx +968 -10
  7. package/cypress/specs/List.cy.tsx +106 -0
  8. package/cypress/specs/ListItem.cy.tsx +291 -1
  9. package/cypress/specs/MediaPlayer.cy.tsx +32 -0
  10. package/cypress/specs/SelectBox.cy.tsx +134 -3
  11. package/cypress/specs/Tag.cy.tsx +34 -3
  12. package/cypress/specs/TextField.cy.tsx +68 -0
  13. package/cypress/support/component-imports.instrumented.ts +6 -0
  14. package/cypress/support/component-imports.src.ts +6 -0
  15. package/dist/AccordionSpotlight.d.ts +149 -0
  16. package/dist/AccordionSpotlight.js +284 -0
  17. package/dist/AccordionSpotlight.js.map +1 -0
  18. package/dist/AccordionSpotlightItem.d.ts +76 -0
  19. package/dist/AccordionSpotlightItem.js +115 -0
  20. package/dist/AccordionSpotlightItem.js.map +1 -0
  21. package/dist/AccordionSpotlightItemTemplate.d.ts +2 -0
  22. package/dist/AccordionSpotlightItemTemplate.js +5 -0
  23. package/dist/AccordionSpotlightItemTemplate.js.map +1 -0
  24. package/dist/AccordionSpotlightTemplate.d.ts +2 -0
  25. package/dist/AccordionSpotlightTemplate.js +10 -0
  26. package/dist/AccordionSpotlightTemplate.js.map +1 -0
  27. package/dist/BusyIndicator.d.ts +9 -0
  28. package/dist/BusyIndicator.js +7 -1
  29. package/dist/BusyIndicator.js.map +1 -1
  30. package/dist/Carousel.d.ts +64 -8
  31. package/dist/Carousel.js +191 -33
  32. package/dist/Carousel.js.map +1 -1
  33. package/dist/CarouselTemplate.js +9 -2
  34. package/dist/CarouselTemplate.js.map +1 -1
  35. package/dist/DatePicker.d.ts +5 -0
  36. package/dist/DatePicker.js +10 -0
  37. package/dist/DatePicker.js.map +1 -1
  38. package/dist/DatePickerTemplate.js +1 -1
  39. package/dist/DatePickerTemplate.js.map +1 -1
  40. package/dist/FilterMenu.d.ts +12 -2
  41. package/dist/FilterMenu.js +24 -4
  42. package/dist/FilterMenu.js.map +1 -1
  43. package/dist/FilterMenuTemplate.js +1 -1
  44. package/dist/FilterMenuTemplate.js.map +1 -1
  45. package/dist/List.d.ts +1 -0
  46. package/dist/List.js +24 -11
  47. package/dist/List.js.map +1 -1
  48. package/dist/ListGroupHeader.js +5 -1
  49. package/dist/ListGroupHeader.js.map +1 -1
  50. package/dist/ListGroupHeaderBase.d.ts +22 -0
  51. package/dist/ListGroupHeaderBase.js +44 -0
  52. package/dist/ListGroupHeaderBase.js.map +1 -1
  53. package/dist/ListItem.d.ts +4 -0
  54. package/dist/ListItem.js +32 -0
  55. package/dist/ListItem.js.map +1 -1
  56. package/dist/MediaPlayer.d.ts +2 -0
  57. package/dist/MediaPlayer.js +12 -0
  58. package/dist/MediaPlayer.js.map +1 -1
  59. package/dist/PromoTile.js +1 -1
  60. package/dist/PromoTile.js.map +1 -1
  61. package/dist/SearchableListBase.d.ts +10 -1
  62. package/dist/SearchableListBase.js +23 -7
  63. package/dist/SearchableListBase.js.map +1 -1
  64. package/dist/SearchableListBaseTemplate.js +3 -2
  65. package/dist/SearchableListBaseTemplate.js.map +1 -1
  66. package/dist/SelectBase.d.ts +14 -0
  67. package/dist/SelectBase.js +56 -3
  68. package/dist/SelectBase.js.map +1 -1
  69. package/dist/SelectBoxTemplate.js +1 -1
  70. package/dist/SelectBoxTemplate.js.map +1 -1
  71. package/dist/TabNavigation.d.ts +6 -0
  72. package/dist/TabNavigation.js +5 -0
  73. package/dist/TabNavigation.js.map +1 -1
  74. package/dist/Tag.js +3 -2
  75. package/dist/Tag.js.map +1 -1
  76. package/dist/TagTemplate.js +2 -2
  77. package/dist/TagTemplate.js.map +1 -1
  78. package/dist/TextField.d.ts +12 -0
  79. package/dist/TextField.js +15 -0
  80. package/dist/TextField.js.map +1 -1
  81. package/dist/TextFieldTemplate.js +1 -1
  82. package/dist/TextFieldTemplate.js.map +1 -1
  83. package/dist/assets/{InputSuggestions-CbKVAumI.js → InputSuggestions-DaB1A6jW.js} +1 -1
  84. package/dist/assets/{ListItemStandardExpandableTextTemplate-C3-WJZBS.js → ListItemStandardExpandableTextTemplate-Co4KQuVw.js} +1 -1
  85. package/dist/assets/{bundle-JYo3bV8v.css → bundle-CkxyEA8c.css} +1 -1
  86. package/dist/assets/{bundle.esm-D8jQybCx.js → bundle.esm-al3NYhoB.js} +242 -239
  87. package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +1 -0
  88. package/dist/assets/messagebundle_en-DoNTK1BE.js +1 -0
  89. package/dist/assets/messagebundle_no-BZQfeWxT.js +1 -0
  90. package/dist/assets/messagebundle_pl-CsXeN1y6.js +1 -0
  91. package/dist/assets/messagebundle_pt_PT-CQ5YAsmx.js +1 -0
  92. package/dist/css/themes/Accordion.css +1 -1
  93. package/dist/css/themes/AccordionItem.css +1 -1
  94. package/dist/css/themes/AccordionSpotlight.css +1 -0
  95. package/dist/css/themes/AccordionSpotlightItem.css +1 -0
  96. package/dist/css/themes/Badge.css +1 -1
  97. package/dist/css/themes/BusyIndicator.css +1 -0
  98. package/dist/css/themes/Button.css +1 -1
  99. package/dist/css/themes/Carousel.css +1 -1
  100. package/dist/css/themes/Divider.css +1 -1
  101. package/dist/css/themes/Dropdown.css +1 -1
  102. package/dist/css/themes/FilterMenu.css +1 -1
  103. package/dist/css/themes/Footer.css +1 -1
  104. package/dist/css/themes/ImageGridTableItem.css +1 -1
  105. package/dist/css/themes/MastheadItem.css +1 -1
  106. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  107. package/dist/css/themes/MastheadShell.css +1 -1
  108. package/dist/css/themes/MediaPlayer.css +1 -1
  109. package/dist/css/themes/PhoneNumberField.css +1 -1
  110. package/dist/css/themes/ProgressBar.css +1 -1
  111. package/dist/css/themes/PromoTile.css +1 -1
  112. package/dist/css/themes/Review.css +1 -1
  113. package/dist/css/themes/ReviewItem.css +1 -1
  114. package/dist/css/themes/Search.css +1 -1
  115. package/dist/css/themes/SelectBase.css +1 -1
  116. package/dist/css/themes/SelectBox.css +1 -1
  117. package/dist/css/themes/SideNavigation.css +1 -1
  118. package/dist/css/themes/SideNavigationGroup.css +1 -1
  119. package/dist/css/themes/SocialMediaButton.css +1 -1
  120. package/dist/css/themes/StepInput.css +1 -1
  121. package/dist/css/themes/Switch.css +1 -1
  122. package/dist/css/themes/TabNavigation.css +1 -1
  123. package/dist/css/themes/Table.css +1 -1
  124. package/dist/css/themes/TableCell.css +1 -1
  125. package/dist/css/themes/TableGroupRow.css +1 -1
  126. package/dist/css/themes/TableHeaderCell.css +1 -1
  127. package/dist/css/themes/Tag.css +1 -1
  128. package/dist/css/themes/TagGroup.css +1 -1
  129. package/dist/css/themes/TextArea.css +1 -1
  130. package/dist/css/themes/TextField.css +1 -1
  131. package/dist/css/themes/Toast.css +1 -1
  132. package/dist/custom-elements-internal.json +511 -35
  133. package/dist/custom-elements.json +455 -49
  134. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  135. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  136. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  137. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  138. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  139. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  140. package/dist/generated/i18n/i18n-defaults.js +3 -1
  141. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  142. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +24 -21
  143. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  144. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  145. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  146. package/dist/generated/themes/Accordion.css.d.ts +1 -1
  147. package/dist/generated/themes/Accordion.css.js +1 -1
  148. package/dist/generated/themes/Accordion.css.js.map +1 -1
  149. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  150. package/dist/generated/themes/AccordionItem.css.js +1 -1
  151. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  152. package/dist/generated/themes/AccordionSpotlight.css.d.ts +2 -0
  153. package/dist/generated/themes/AccordionSpotlight.css.js +8 -0
  154. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -0
  155. package/dist/generated/themes/AccordionSpotlightItem.css.d.ts +2 -0
  156. package/dist/generated/themes/AccordionSpotlightItem.css.js +8 -0
  157. package/dist/generated/themes/AccordionSpotlightItem.css.js.map +1 -0
  158. package/dist/generated/themes/Badge.css.d.ts +1 -1
  159. package/dist/generated/themes/Badge.css.js +1 -1
  160. package/dist/generated/themes/Badge.css.js.map +1 -1
  161. package/dist/generated/themes/BusyIndicator.css.d.ts +2 -0
  162. package/dist/generated/themes/BusyIndicator.css.js +8 -0
  163. package/dist/generated/themes/BusyIndicator.css.js.map +1 -0
  164. package/dist/generated/themes/Button.css.d.ts +1 -1
  165. package/dist/generated/themes/Button.css.js +1 -1
  166. package/dist/generated/themes/Button.css.js.map +1 -1
  167. package/dist/generated/themes/Carousel.css.d.ts +1 -1
  168. package/dist/generated/themes/Carousel.css.js +1 -1
  169. package/dist/generated/themes/Carousel.css.js.map +1 -1
  170. package/dist/generated/themes/Divider.css.d.ts +1 -1
  171. package/dist/generated/themes/Divider.css.js +1 -1
  172. package/dist/generated/themes/Divider.css.js.map +1 -1
  173. package/dist/generated/themes/Dropdown.css.d.ts +1 -1
  174. package/dist/generated/themes/Dropdown.css.js +1 -1
  175. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  176. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  177. package/dist/generated/themes/FilterMenu.css.js +1 -1
  178. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  179. package/dist/generated/themes/Footer.css.d.ts +1 -1
  180. package/dist/generated/themes/Footer.css.js +1 -1
  181. package/dist/generated/themes/Footer.css.js.map +1 -1
  182. package/dist/generated/themes/ImageGridTableItem.css.d.ts +1 -1
  183. package/dist/generated/themes/ImageGridTableItem.css.js +1 -1
  184. package/dist/generated/themes/ImageGridTableItem.css.js.map +1 -1
  185. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  186. package/dist/generated/themes/MastheadItem.css.js +1 -1
  187. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  188. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  189. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  190. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  191. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  192. package/dist/generated/themes/MastheadShell.css.js +1 -1
  193. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  194. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  195. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  196. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  197. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  198. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  199. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  200. package/dist/generated/themes/ProgressBar.css.d.ts +1 -1
  201. package/dist/generated/themes/ProgressBar.css.js +1 -1
  202. package/dist/generated/themes/ProgressBar.css.js.map +1 -1
  203. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  204. package/dist/generated/themes/PromoTile.css.js +1 -1
  205. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  206. package/dist/generated/themes/Review.css.d.ts +1 -1
  207. package/dist/generated/themes/Review.css.js +1 -1
  208. package/dist/generated/themes/Review.css.js.map +1 -1
  209. package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
  210. package/dist/generated/themes/ReviewItem.css.js +1 -1
  211. package/dist/generated/themes/ReviewItem.css.js.map +1 -1
  212. package/dist/generated/themes/Search.css.d.ts +1 -1
  213. package/dist/generated/themes/Search.css.js +1 -1
  214. package/dist/generated/themes/Search.css.js.map +1 -1
  215. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  216. package/dist/generated/themes/SelectBase.css.js +1 -1
  217. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  218. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  219. package/dist/generated/themes/SelectBox.css.js +1 -1
  220. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  221. package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
  222. package/dist/generated/themes/SideNavigation.css.js +1 -1
  223. package/dist/generated/themes/SideNavigation.css.js.map +1 -1
  224. package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
  225. package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
  226. package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
  227. package/dist/generated/themes/SocialMediaButton.css.d.ts +1 -1
  228. package/dist/generated/themes/SocialMediaButton.css.js +1 -1
  229. package/dist/generated/themes/SocialMediaButton.css.js.map +1 -1
  230. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  231. package/dist/generated/themes/StepInput.css.js +1 -1
  232. package/dist/generated/themes/StepInput.css.js.map +1 -1
  233. package/dist/generated/themes/Switch.css.d.ts +1 -1
  234. package/dist/generated/themes/Switch.css.js +1 -1
  235. package/dist/generated/themes/Switch.css.js.map +1 -1
  236. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  237. package/dist/generated/themes/TabNavigation.css.js +1 -1
  238. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  239. package/dist/generated/themes/Table.css.d.ts +1 -1
  240. package/dist/generated/themes/Table.css.js +1 -1
  241. package/dist/generated/themes/Table.css.js.map +1 -1
  242. package/dist/generated/themes/TableCell.css.d.ts +1 -1
  243. package/dist/generated/themes/TableCell.css.js +1 -1
  244. package/dist/generated/themes/TableCell.css.js.map +1 -1
  245. package/dist/generated/themes/TableGroupRow.css.d.ts +1 -1
  246. package/dist/generated/themes/TableGroupRow.css.js +1 -1
  247. package/dist/generated/themes/TableGroupRow.css.js.map +1 -1
  248. package/dist/generated/themes/TableHeaderCell.css.d.ts +1 -1
  249. package/dist/generated/themes/TableHeaderCell.css.js +1 -1
  250. package/dist/generated/themes/TableHeaderCell.css.js.map +1 -1
  251. package/dist/generated/themes/Tag.css.d.ts +1 -1
  252. package/dist/generated/themes/Tag.css.js +1 -1
  253. package/dist/generated/themes/Tag.css.js.map +1 -1
  254. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  255. package/dist/generated/themes/TagGroup.css.js +1 -1
  256. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  257. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  258. package/dist/generated/themes/TextArea.css.js +1 -1
  259. package/dist/generated/themes/TextArea.css.js.map +1 -1
  260. package/dist/generated/themes/TextField.css.d.ts +1 -1
  261. package/dist/generated/themes/TextField.css.js +1 -1
  262. package/dist/generated/themes/TextField.css.js.map +1 -1
  263. package/dist/generated/themes/Toast.css.d.ts +1 -1
  264. package/dist/generated/themes/Toast.css.js +1 -1
  265. package/dist/generated/themes/Toast.css.js.map +1 -1
  266. package/dist/messagebundle.properties +3 -0
  267. package/dist/messagebundle_ar.properties +99 -0
  268. package/dist/messagebundle_en.properties +2 -0
  269. package/dist/messagebundle_no.properties +126 -1
  270. package/dist/messagebundle_pl.properties +134 -1
  271. package/dist/messagebundle_pt_PT.properties +126 -1
  272. package/dist/vscode.html-custom-data.json +92 -12
  273. package/dist/web-types.json +233 -27
  274. package/package.json +1 -1
  275. package/src/AccordionSpotlight.ts +321 -0
  276. package/src/AccordionSpotlightItem.ts +117 -0
  277. package/src/AccordionSpotlightItemTemplate.tsx +7 -0
  278. package/src/AccordionSpotlightTemplate.tsx +107 -0
  279. package/src/BusyIndicator.ts +17 -2
  280. package/src/Carousel.ts +243 -34
  281. package/src/CarouselTemplate.tsx +66 -27
  282. package/src/DatePicker.ts +9 -0
  283. package/src/DatePickerTemplate.tsx +2 -1
  284. package/src/FilterMenu.ts +25 -4
  285. package/src/FilterMenuTemplate.tsx +1 -1
  286. package/src/List.ts +23 -11
  287. package/src/ListGroupHeader.hbs +11 -10
  288. package/src/ListGroupHeader.ts +5 -1
  289. package/src/ListGroupHeaderBase.ts +48 -0
  290. package/src/ListItem.hbs +5 -1
  291. package/src/ListItem.ts +36 -0
  292. package/src/MediaPlayer.ts +11 -0
  293. package/src/PromoTile.ts +1 -1
  294. package/src/SearchableListBase.ts +24 -7
  295. package/src/SearchableListBaseTemplate.tsx +5 -2
  296. package/src/SelectBase.ts +58 -3
  297. package/src/SelectBoxTemplate.tsx +1 -0
  298. package/src/TabNavigation.ts +6 -0
  299. package/src/Tag.ts +3 -2
  300. package/src/TagTemplate.tsx +2 -0
  301. package/src/TextField.ts +26 -1
  302. package/src/TextFieldTemplate.tsx +1 -0
  303. package/src/generated/i18n/i18n-defaults.ts +2 -2
  304. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +24 -21
  305. package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
  306. package/src/generated/themes/Accordion.css.ts +1 -1
  307. package/src/generated/themes/AccordionItem.css.ts +1 -1
  308. package/src/generated/themes/AccordionSpotlight.css.ts +9 -0
  309. package/src/generated/themes/AccordionSpotlightItem.css.ts +9 -0
  310. package/src/generated/themes/Badge.css.ts +1 -1
  311. package/src/generated/themes/BusyIndicator.css.ts +9 -0
  312. package/src/generated/themes/Button.css.ts +1 -1
  313. package/src/generated/themes/Carousel.css.ts +1 -1
  314. package/src/generated/themes/Divider.css.ts +1 -1
  315. package/src/generated/themes/Dropdown.css.ts +1 -1
  316. package/src/generated/themes/FilterMenu.css.ts +1 -1
  317. package/src/generated/themes/Footer.css.ts +1 -1
  318. package/src/generated/themes/ImageGridTableItem.css.ts +1 -1
  319. package/src/generated/themes/MastheadItem.css.ts +1 -1
  320. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  321. package/src/generated/themes/MastheadShell.css.ts +1 -1
  322. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  323. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  324. package/src/generated/themes/ProgressBar.css.ts +1 -1
  325. package/src/generated/themes/PromoTile.css.ts +1 -1
  326. package/src/generated/themes/Review.css.ts +1 -1
  327. package/src/generated/themes/ReviewItem.css.ts +1 -1
  328. package/src/generated/themes/Search.css.ts +1 -1
  329. package/src/generated/themes/SelectBase.css.ts +1 -1
  330. package/src/generated/themes/SelectBox.css.ts +1 -1
  331. package/src/generated/themes/SideNavigation.css.ts +1 -1
  332. package/src/generated/themes/SideNavigationGroup.css.ts +1 -1
  333. package/src/generated/themes/SocialMediaButton.css.ts +1 -1
  334. package/src/generated/themes/StepInput.css.ts +1 -1
  335. package/src/generated/themes/Switch.css.ts +1 -1
  336. package/src/generated/themes/TabNavigation.css.ts +1 -1
  337. package/src/generated/themes/Table.css.ts +1 -1
  338. package/src/generated/themes/TableCell.css.ts +1 -1
  339. package/src/generated/themes/TableGroupRow.css.ts +1 -1
  340. package/src/generated/themes/TableHeaderCell.css.ts +1 -1
  341. package/src/generated/themes/Tag.css.ts +1 -1
  342. package/src/generated/themes/TagGroup.css.ts +1 -1
  343. package/src/generated/themes/TextArea.css.ts +1 -1
  344. package/src/generated/themes/TextField.css.ts +1 -1
  345. package/src/generated/themes/Toast.css.ts +1 -1
  346. package/src/i18n/messagebundle.properties +3 -0
  347. package/src/i18n/messagebundle_ar.properties +99 -0
  348. package/src/i18n/messagebundle_en.properties +2 -0
  349. package/src/i18n/messagebundle_no.properties +126 -1
  350. package/src/i18n/messagebundle_pl.properties +134 -1
  351. package/src/i18n/messagebundle_pt_PT.properties +126 -1
  352. package/src/themes/Accordion.css +1 -1
  353. package/src/themes/AccordionItem.css +4 -4
  354. package/src/themes/AccordionSpotlight.css +264 -0
  355. package/src/themes/AccordionSpotlightItem.css +3 -0
  356. package/src/themes/Badge.css +7 -7
  357. package/src/themes/BusyIndicator.css +24 -0
  358. package/src/themes/Button.css +57 -57
  359. package/src/themes/Carousel.css +20 -8
  360. package/src/themes/Divider.css +1 -1
  361. package/src/themes/Dropdown.css +1 -1
  362. package/src/themes/FilterMenu.css +2 -2
  363. package/src/themes/Footer.css +1 -1
  364. package/src/themes/ImageGridTableItem.css +1 -1
  365. package/src/themes/MastheadItem.css +7 -4
  366. package/src/themes/MastheadProfileMenu.css +0 -13
  367. package/src/themes/MastheadShell.css +2 -2
  368. package/src/themes/MediaPlayer.css +5 -34
  369. package/src/themes/PhoneNumberField.css +6 -6
  370. package/src/themes/ProgressBar.css +4 -0
  371. package/src/themes/PromoTile.css +4 -4
  372. package/src/themes/Review.css +2 -2
  373. package/src/themes/ReviewItem.css +2 -2
  374. package/src/themes/Search.css +5 -5
  375. package/src/themes/SelectBase.css +14 -14
  376. package/src/themes/SelectBox.css +1 -1
  377. package/src/themes/SideNavigation.css +1 -1
  378. package/src/themes/SideNavigationGroup.css +1 -1
  379. package/src/themes/SocialMediaButton.css +2 -2
  380. package/src/themes/StepInput.css +8 -8
  381. package/src/themes/Switch.css +9 -9
  382. package/src/themes/TabNavigation.css +1 -1
  383. package/src/themes/Table.css +1 -1
  384. package/src/themes/TableCell.css +3 -3
  385. package/src/themes/TableGroupRow.css +1 -1
  386. package/src/themes/TableHeaderCell.css +3 -4
  387. package/src/themes/Tag.css +28 -4
  388. package/src/themes/TagGroup.css +1 -0
  389. package/src/themes/TextArea.css +4 -4
  390. package/src/themes/TextField.css +13 -13
  391. package/src/themes/Toast.css +1 -1
  392. package/dist/assets/messagebundle_ar-BNhVFt1-.js +0 -1
  393. package/dist/assets/messagebundle_en-BZqDcZHN.js +0 -1
  394. package/dist/assets/messagebundle_no-BIUfmTWJ.js +0 -1
  395. package/dist/assets/messagebundle_pl-BmaELnDD.js +0 -1
  396. package/dist/assets/messagebundle_pt_PT-DcVh6BH6.js +0 -1
package/src/Carousel.ts CHANGED
@@ -7,15 +7,21 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
7
7
  import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
8
8
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
9
9
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
10
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
11
+ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
12
  import {
11
13
  isUp, isDown, isRight, isLeft,
12
14
  } from "@ui5/webcomponents-base/dist/Keys.js";
13
- import { CAROUSEL_NEXT_ARROW_TEXT, CAROUSEL_PREVIOUS_ARROW_TEXT } from "./generated/i18n/i18n-defaults.js";
15
+ import {
16
+ CAROUSEL_NEXT_ARROW_TEXT,
17
+ CAROUSEL_PREVIOUS_ARROW_TEXT,
18
+ CAROUSEL_AUTOPLAY_TOGGLE_START,
19
+ CAROUSEL_AUTOPLAY_TOGGLE_STOP,
20
+ } from "./generated/i18n/i18n-defaults.js";
14
21
  import redirectAttributes from "./utils/redirectAttributes.js";
15
22
  import type UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
16
23
  import type { CarouselNavigateEventDetail } from "@ui5/webcomponents/dist/Carousel.js";
17
24
  import type { UI5CustomEvent } from "@ui5/webcomponents-base";
18
- import type Icon from "@ui5/webcomponents/dist/Icon.js";
19
25
  import translate from "./utils/translate.js";
20
26
 
21
27
  import CarouselTemplate from "./CarouselTemplate.js";
@@ -23,7 +29,6 @@ import CarouselTemplate from "./CarouselTemplate.js";
23
29
  // Styles
24
30
  import CarouselCss from "./generated/themes/Carousel.css.js";
25
31
  import type CarouselPageIndicatorType from "@ui5/webcomponents/dist/types/CarouselPageIndicatorType.js";
26
- import type UDExButton from "./Button.js";
27
32
 
28
33
  export enum UDExCarouselNavigationPosition {
29
34
  top = "top",
@@ -35,6 +40,10 @@ export enum UDExCarouselButtonDesign {
35
40
  Tertiary = "Tertiary",
36
41
  }
37
42
 
43
+ type UDExCarouselAutoplayToggleEventDetails = {
44
+ isPaused: boolean;
45
+ }
46
+
38
47
  /**
39
48
  * @class
40
49
  *
@@ -65,10 +74,18 @@ export enum UDExCarouselButtonDesign {
65
74
  * @param { CustomEvent }
66
75
  */
67
76
  @event("navigate")
77
+ /**
78
+ * Fired event when the user click on a play/paused button.
79
+ *
80
+ * @public
81
+ * @param {boolean} isPaused - Indicates current state of autoplay
82
+ */
83
+ @event("autoplay-toggle-click", { bubbles: true })
68
84
 
69
85
  class UDExCarousel extends UI5Element {
70
86
  eventDetails!: {
71
87
  "navigate": CarouselNavigateEventDetail,
88
+ "autoplay-toggle-click": UDExCarouselAutoplayToggleEventDetails,
72
89
  };
73
90
  /**
74
91
  * Defines the position of the navigation.
@@ -83,6 +100,37 @@ class UDExCarousel extends UI5Element {
83
100
  */
84
101
  @property()
85
102
  navigationPlacement: `${UDExCarouselNavigationPosition}` = UDExCarouselNavigationPosition.top;
103
+ /**
104
+ * Controls carousel autoplay functionality
105
+ * @public
106
+ * @default undefined
107
+ */
108
+ @property({ type: Boolean })
109
+ autoplay?: boolean;
110
+
111
+ /**
112
+ * Defines carousel autoplay speed in milliseconds till next slide
113
+ * @public
114
+ */
115
+ @property({ type: Number })
116
+ autoplaySpeed: number = 2000;
117
+
118
+ /**
119
+ * Indicates current state of autoplay.
120
+ *
121
+ * @default true
122
+ * @private
123
+ */
124
+ @property({ type: Boolean })
125
+ _autoplayIsPaused = true;
126
+
127
+ /**
128
+ * Defines whether the carousel should loop, i.e show the first page after the last page is reached and vice versa.
129
+ * @public
130
+ * @default false
131
+ */
132
+ @property({ type: Boolean })
133
+ cyclic?: boolean;
86
134
 
87
135
  /**
88
136
  * Defines the content of the component.
@@ -148,46 +196,145 @@ class UDExCarousel extends UI5Element {
148
196
  @property({ type: String })
149
197
  accessibleName: string = "";
150
198
 
199
+ /**
200
+ * Tracks whether the inner carousel has multiple pages (updated after render).
201
+ *
202
+ * @default false
203
+ * @private
204
+ */
205
+ @property({ type: Boolean, noAttribute: true })
206
+ _hasManyPages = false;
207
+
151
208
  @i18n("@sapudex/web-components")
152
209
  static i18nBundle: I18nBundle;
153
210
 
154
- get nextPageText(): string {
155
- return translate(UDExCarousel, CAROUSEL_NEXT_ARROW_TEXT);
211
+ _autoplayInterval: ReturnType<typeof setInterval> | null = null;
212
+ _autoplayLastToggle = Date.now();
213
+ _autoplayMinTimeBetweenToggle = 250;
214
+ _autoplayManualStop = false;
215
+ _resizeHandler: ResizeObserverCallback;
216
+
217
+ constructor() {
218
+ super();
219
+ this._resizeHandler = this._onResize.bind(this);
156
220
  }
157
221
 
158
- get previousPageText(): string {
159
- return translate(UDExCarousel, CAROUSEL_PREVIOUS_ARROW_TEXT);
222
+ onAfterRendering() {
223
+ redirectAttributes(this, "carousel");
224
+
225
+ this._calculateDisabledButtonsState();
226
+
227
+ if (this._autoplayInterval === null) {
228
+ this._startAutoplay();
229
+ }
160
230
  }
161
231
 
162
- get carouselClass(): string {
163
- const classes = "udex-carousel";
232
+ onExitDOM(): void {
233
+ ResizeHandler.deregister(this, this._resizeHandler);
164
234
 
165
- return `${classes} udex-carousel__navigation--${this.navigationPlacement}`;
235
+ if (this._autoplayInterval) {
236
+ clearInterval(this._autoplayInterval);
237
+ }
166
238
  }
167
239
 
168
- get buttonDesign(): UDExCarouselButtonDesign {
169
- return this.navigationPlacement === UDExCarouselNavigationPosition.top
170
- ? UDExCarouselButtonDesign.Secondary
171
- : UDExCarouselButtonDesign.Tertiary;
240
+ onEnterDOM(): void {
241
+ ResizeHandler.register(this, this._resizeHandler);
172
242
  }
173
243
 
174
- get showNavigationButtons(): { top: boolean; bottom: boolean } {
175
- return {
176
- top: this.navigationPlacement === UDExCarouselNavigationPosition.top,
177
- bottom: this.navigationPlacement === UDExCarouselNavigationPosition.bottom,
178
- };
244
+ _onResize(): void {
245
+ this._hasManyPages = this._carousel?.hasManyPages ?? false;
179
246
  }
180
247
 
181
- get _hidePageIndicator(): boolean {
182
- return this.navigationPlacement === UDExCarouselNavigationPosition.top;
248
+ _autoplayLoop = () => {
249
+ const items = this._carousel?.items;
250
+ if (!items) {
251
+ return;
252
+ }
253
+
254
+ const currentSlide = this._carousel._currentPageIndex;
255
+ const itemsPerPage = this._carousel.effectiveItemsPerPage;
256
+ const isLastSlide = currentSlide === (items.length - itemsPerPage);
257
+
258
+ if (isLastSlide && !this.cyclic) {
259
+ this._stopAutoplay();
260
+ this._autoplayManualStop = true;
261
+
262
+ return;
263
+ }
264
+
265
+ const nextSlide = isLastSlide ? 0 : (currentSlide + itemsPerPage);
266
+
267
+ this._carousel?.navigateTo(nextSlide);
268
+ this._calculateDisabledButtonsState();
269
+ };
270
+
271
+ _startAutoplay(): void {
272
+ if (!this.autoplay) {
273
+ return;
274
+ }
275
+
276
+ if (!this._carousel?.items) {
277
+ console.warn("[UDExCarousel] Cannot start autoplay on an empty carousel");
278
+ return;
279
+ }
280
+
281
+ const toggleBuffer = Date.now() - this._autoplayLastToggle;
282
+ if (this._autoplayInterval !== null && toggleBuffer <= this._autoplayMinTimeBetweenToggle) {
283
+ this._autoplayLastToggle = Date.now();
284
+ return;
285
+ }
286
+
287
+ if (this._autoplayInterval !== null) {
288
+ clearInterval(this._autoplayInterval);
289
+ }
290
+
291
+ this._autoplayInterval = setInterval(this._autoplayLoop, this.autoplaySpeed);
292
+ this._autoplayIsPaused = false;
293
+ this._autoplayLastToggle = Date.now();
183
294
  }
184
295
 
185
- get _carousel(): UI5Carousel | null {
186
- return this.shadowRoot!.querySelector<UI5Carousel>("[ui5-carousel]");
296
+ _stopAutoplay(): void {
297
+ if (!this._autoplayInterval) {
298
+ return;
299
+ }
300
+
301
+ clearInterval(this._autoplayInterval);
302
+ this._autoplayIsPaused = true;
303
+ this._autoplayLastToggle = Date.now();
304
+ }
305
+
306
+ _onAutoplayToggleClick(): void {
307
+ if (this._autoplayIsPaused) {
308
+ this._startAutoplay();
309
+ this._autoplayManualStop = false;
310
+ } else {
311
+ this._stopAutoplay();
312
+ this._autoplayManualStop = true;
313
+ }
314
+
315
+ this.fireDecoratorEvent("autoplay-toggle-click", {
316
+ isPaused: this._autoplayIsPaused,
317
+ });
318
+ }
319
+
320
+ _onFocusIn(): void {
321
+ this._stopAutoplay();
322
+ }
323
+
324
+ _onFocusOut(): void {
325
+ if (!this._autoplayManualStop) {
326
+ this._startAutoplay();
327
+ }
187
328
  }
188
329
 
189
- get _ui5CarouselRoot(): HTMLElement | null | undefined {
190
- return this._carousel?.shadowRoot?.querySelector(".ui5-carousel-root");
330
+ _onMouseEnter(): void {
331
+ this._stopAutoplay();
332
+ }
333
+
334
+ _onMouseLeave(): void {
335
+ if (!this._autoplayManualStop) {
336
+ this._startAutoplay();
337
+ }
191
338
  }
192
339
 
193
340
  _calculateDisabledButtonsState() {
@@ -195,20 +342,22 @@ class UDExCarousel extends UI5Element {
195
342
  this.isNextButtonDisabled = !this._carousel?.hasNext;
196
343
  }
197
344
 
198
- _prevButtonClick(e: UI5CustomEvent<UDExButton, "click">) {
199
- if (this.isPrevButtonDisabled) {
345
+ _prevButtonClick() {
346
+ if (this.isPrevButtonDisabled || !this._carousel) {
200
347
  return;
201
348
  }
202
349
 
203
- this._carousel?._navButtonClick(e as unknown as UI5CustomEvent<Icon, "click">);
350
+ this._carousel.navigateLeft();
351
+ this._calculateDisabledButtonsState();
204
352
  }
205
353
 
206
- _nextButtonClick(e: UI5CustomEvent<UDExButton, "click">) {
207
- if (this.isNextButtonDisabled) {
354
+ _nextButtonClick() {
355
+ if (this.isNextButtonDisabled || !this._carousel) {
208
356
  return;
209
357
  }
210
358
 
211
- this._carousel?._navButtonClick(e as unknown as UI5CustomEvent<Icon, "click">);
359
+ this._carousel.navigateRight();
360
+ this._calculateDisabledButtonsState();
212
361
  }
213
362
 
214
363
  _onkeydown(e: KeyboardEvent) {
@@ -223,13 +372,73 @@ class UDExCarousel extends UI5Element {
223
372
  this.fireDecoratorEvent("navigate", e.detail);
224
373
  }
225
374
 
226
- onAfterRendering() {
227
- redirectAttributes(this, "carousel");
375
+ get nextPageText(): string {
376
+ return translate(UDExCarousel, CAROUSEL_NEXT_ARROW_TEXT);
377
+ }
228
378
 
229
- this._calculateDisabledButtonsState();
379
+ get previousPageText(): string {
380
+ return translate(UDExCarousel, CAROUSEL_PREVIOUS_ARROW_TEXT);
381
+ }
382
+
383
+ get carouselClass(): string {
384
+ const classes = "udex-carousel";
385
+
386
+ return `${classes} udex-carousel__navigation--${this.navigationPlacement}`;
387
+ }
388
+
389
+ get navigationWrapperClass(): string {
390
+ let _class = "udex-carousel__navigation-wrapper";
391
+
392
+ if (this.autoplay) {
393
+ _class += " udex-carousel__navigation-wrapper--autoplay";
394
+ }
395
+
396
+ return _class;
397
+ }
398
+
399
+ get navigationButtonWrapperClass(): string {
400
+ let _class = "udex-carousel__navigation-button-wrapper";
401
+
402
+ if (this._carousel?.isPageTypeDots) {
403
+ _class += " udex-carousel__navigation-button-wrapper--dot-indicators";
404
+ }
405
+
406
+ return _class;
407
+ }
408
+
409
+ get buttonDesign(): UDExCarouselButtonDesign {
410
+ return this.navigationPlacement === UDExCarouselNavigationPosition.top
411
+ ? UDExCarouselButtonDesign.Secondary
412
+ : UDExCarouselButtonDesign.Tertiary;
413
+ }
414
+
415
+ get showNavigationButtons(): { top: boolean; bottom: boolean } {
416
+ return {
417
+ top: this.navigationPlacement === UDExCarouselNavigationPosition.top && this._hasManyPages,
418
+ bottom: this.navigationPlacement === UDExCarouselNavigationPosition.bottom && this._hasManyPages,
419
+ };
420
+ }
421
+
422
+ get _hidePageIndicator(): boolean {
423
+ return this.navigationPlacement === UDExCarouselNavigationPosition.top;
424
+ }
425
+
426
+ get _carousel(): UI5Carousel | null {
427
+ return this.shadowRoot!.querySelector<UI5Carousel>("[ui5-carousel]");
428
+ }
429
+
430
+ get _isBottomNavigation(): boolean {
431
+ return this.navigationPlacement === UDExCarouselNavigationPosition.bottom;
432
+ }
433
+
434
+ get autoplayToggleButtonTooltipText(): string {
435
+ return this._autoplayIsPaused
436
+ ? translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_START)
437
+ : translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_STOP);
230
438
  }
231
439
  }
232
440
 
233
441
  UDExCarousel.define();
234
442
 
235
443
  export default UDExCarousel;
444
+ export type { CarouselNavigateEventDetail, UDExCarouselAutoplayToggleEventDetails };
@@ -2,15 +2,19 @@ import type Carousel from "./Carousel.js";
2
2
  import UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
3
3
  import UDExButton from "./Button.js";
4
4
  import UDExButtonSize from "./types/ButtonSize.js";
5
+ import UDExButtonDesign from "./types/ButtonDesign.js";
5
6
  import type SlottedChild from "@ui5/webcomponents-base/dist/UI5Element.js";
6
7
  import CarouselArrowsPlacement from "@ui5/webcomponents/dist/types/CarouselArrowsPlacement.js";
7
8
  import slimArrowLeft from "@ui5/webcomponents-icons/dist/slim-arrow-left.js";
8
9
  import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
10
+ import play from "@ui5/webcomponents-icons/dist/play.js";
11
+ import pause from "@ui5/webcomponents-icons/dist/pause.js";
9
12
 
10
13
  export default function CarouselTemplate(this: Carousel) {
11
14
  return (
12
15
  <div className={this.carouselClass} onKeyDown={this._onkeydown}>
13
16
  {this.showNavigationButtons.top && navigation.call(this)}
17
+
14
18
  <UI5Carousel
15
19
  itemsPerPage={this.itemsPerPage}
16
20
  pageIndicatorType={this.pageIndicatorType}
@@ -19,11 +23,20 @@ export default function CarouselTemplate(this: Carousel) {
19
23
  arrowsPlacement={CarouselArrowsPlacement.Navigation}
20
24
  accessibleName={this.accessibleName}
21
25
  hidePageIndicator={this._hidePageIndicator}
22
- onNavigate={this._handleNavigate}>
23
- {this.items.map(item =>
24
- <slot name={(item as SlottedChild)._individualSlot}></slot>
25
- )}
26
+ onNavigate={this._handleNavigate}
27
+ onMouseEnter={this._onMouseEnter}
28
+ onMouseLeave={this._onMouseLeave}
29
+ onFocusIn={this._onFocusIn}
30
+ onFocusOut={this._onFocusOut}
31
+ cyclic={this.cyclic}
32
+ >
33
+ {
34
+ this.items.map(item =>
35
+ <slot name={(item as SlottedChild)._individualSlot}></slot>
36
+ )
37
+ }
26
38
  </UI5Carousel>
39
+
27
40
  {this.showNavigationButtons.bottom && navigation.call(this)}
28
41
  </div>
29
42
  );
@@ -31,31 +44,57 @@ export default function CarouselTemplate(this: Carousel) {
31
44
 
32
45
  function navigation(this: Carousel) {
33
46
  const btnClassName = "udex-carousel__navigation-button";
47
+ const icon = this._autoplayIsPaused ? play : pause;
34
48
 
35
49
  return (
36
- <div class="udex-carousel__navigation-wrapper" part="navigation">
37
- <UDExButton
38
- data-ui5-arrow-back
39
- size={UDExButtonSize.Large}
40
- disabled={this.isPrevButtonDisabled}
41
- class={btnClassName}
42
- icon={slimArrowLeft}
43
- design={this.buttonDesign}
44
- tooltip={this.previousPageText}
45
- onClick={this._prevButtonClick}
46
- part="prev-button">
47
- </UDExButton>
48
- <UDExButton
49
- data-ui5-arrow-forward
50
- size={UDExButtonSize.Large}
51
- disabled={this.isNextButtonDisabled}
52
- class={btnClassName}
53
- icon={slimArrowRight}
54
- design={this.buttonDesign}
55
- tooltip={this.nextPageText}
56
- onClick={this._nextButtonClick}
57
- part="next-button">
58
- </UDExButton>
50
+ <div className={this.navigationWrapperClass} part="navigation">
51
+ {
52
+ this.autoplay &&
53
+ <UDExButton
54
+ class={`udex-carousel__autoplay-toggle-button`}
55
+ size={UDExButtonSize.Large}
56
+ design={UDExButtonDesign.Tertiary}
57
+ icon={icon}
58
+ onClick={this._onAutoplayToggleClick}
59
+ tooltip={this.autoplayToggleButtonTooltipText}
60
+ ></UDExButton>
61
+ }
62
+
63
+ <div className={this.navigationButtonWrapperClass}>
64
+ <UDExButton
65
+ data-ui5-arrow-back
66
+ size={UDExButtonSize.Large}
67
+ disabled={this.isPrevButtonDisabled}
68
+ class={btnClassName}
69
+ icon={slimArrowLeft}
70
+ design={this.buttonDesign}
71
+ tooltip={this.previousPageText}
72
+ onClick={this._prevButtonClick}
73
+ part="prev-button">
74
+ </UDExButton>
75
+
76
+ {
77
+ this._isBottomNavigation &&
78
+ <div className="udex-carousel__navigation-page-indicator-spacer" />
79
+ }
80
+
81
+ <UDExButton
82
+ data-ui5-arrow-forward
83
+ size={UDExButtonSize.Large}
84
+ disabled={this.isNextButtonDisabled}
85
+ class={btnClassName}
86
+ icon={slimArrowRight}
87
+ design={this.buttonDesign}
88
+ tooltip={this.nextPageText}
89
+ onClick={this._nextButtonClick}
90
+ part="next-button">
91
+ </UDExButton>
92
+ </div>
93
+
94
+ {
95
+ this.autoplay && this._isBottomNavigation &&
96
+ <div className="udex-carousel__navigation-spacer"></div>
97
+ }
59
98
  </div>
60
99
  );
61
100
  }
package/src/DatePicker.ts CHANGED
@@ -215,6 +215,13 @@ class UDExDatePicker extends DateComponentBase {
215
215
  @property()
216
216
  _tempValue!: string;
217
217
 
218
+ /**
219
+ * Tracks whether the calendar popover is currently open, used to reflect aria-expanded on the control button.
220
+ * @private
221
+ */
222
+ @property({ type: Boolean, noAttribute: true })
223
+ _isPopoverOpen: boolean = false;
224
+
218
225
  @i18n("@sapudex/web-components")
219
226
  static i18nBundle: I18nBundle;
220
227
 
@@ -237,6 +244,7 @@ class UDExDatePicker extends DateComponentBase {
237
244
  }
238
245
 
239
246
  _afterDropdownClose(): void {
247
+ this._isPopoverOpen = false;
240
248
  this._dropdownTrigger.active = false;
241
249
  this._dropdownTrigger.iconActive = false;
242
250
  this._dropdownTrigger.shadowRoot?.querySelector("input")?.blur();
@@ -244,6 +252,7 @@ class UDExDatePicker extends DateComponentBase {
244
252
  }
245
253
 
246
254
  _afterDropdownOpen(): void {
255
+ this._isPopoverOpen = true;
247
256
  this._dropdownTrigger.iconActive = true;
248
257
  }
249
258
 
@@ -7,7 +7,6 @@ export default function DatePickerTemplate(this: DatePicker) {
7
7
  <>
8
8
  <UDExTextField
9
9
  class="udex-date-picker__input"
10
- _aria-has-popup="grid"
11
10
  icon="appointment-2"
12
11
  value={this.value}
13
12
  placeholder={this._effectivePlaceholder}
@@ -15,6 +14,8 @@ export default function DatePickerTemplate(this: DatePicker) {
15
14
  accessible-name={this.dateAccessibleName}
16
15
  accessible-name-ref={this.accessibleNameRef}
17
16
  accessible-icon-name={this.accessibleIconName}
17
+ _icon-aria-has-popup="grid"
18
+ _icon-aria-expanded={this._isPopoverOpen ? "true" : "false"}
18
19
  {...(this.disabled ? { "disabled": true } : {})}
19
20
  {...(this.required ? { "required": true } : {})}
20
21
  {...(this.readonly ? { "readonly": true } : {})}
package/src/FilterMenu.ts CHANGED
@@ -296,19 +296,19 @@ class UDExFilterMenu extends UDExSearchableListBase {
296
296
  accessibleNameRef!: string;
297
297
  /**
298
298
  * Allows setting a custom role.
299
- * @default "None"
299
+ * @default "Dialog"
300
300
  * @public
301
301
  */
302
302
  @property()
303
- accessibleRole: `${PopupAccessibleRole}` = PopupAccessibleRole.None;
303
+ accessibleRole: `${PopupAccessibleRole}` = PopupAccessibleRole.Dialog;
304
304
 
305
305
  /**
306
306
  * Allows setting a custom role for dropdown trigger.
307
- * @default "combobox"
307
+ * @default "button"
308
308
  * @public
309
309
  */
310
310
  @property({ type: String })
311
- triggerAccessibleRole: string = "combobox";
311
+ triggerAccessibleRole: string = "button";
312
312
 
313
313
  /**
314
314
  * Determines whether the filter should be applied.
@@ -591,6 +591,27 @@ class UDExFilterMenu extends UDExSearchableListBase {
591
591
  return translate(UDExFilterMenu, SELECT_OPTIONS);
592
592
  }
593
593
 
594
+ /**
595
+ * FilterMenu uses the ARIA tree pattern for genuinely grouped items when:
596
+ * - MultiSelect mode (headers/items expose aria-checked), or
597
+ * - SingleSelect mode with at least one collapsible group
598
+ * (headers expose aria-expanded, items expose aria-selected).
599
+ *
600
+ * A "Select All" header is NOT a hierarchical group — it is a bulk-select
601
+ * affordance for a flat list — so it must not trigger the tree pattern.
602
+ */
603
+ override get isTreeStructure(): boolean {
604
+ const groups = this._filteredItems.filter(e => e.isGroup && !(e.item as UDExListGroupHeaderBase).isSelectAllHeader);
605
+ if (!groups.length) {
606
+ return false;
607
+ }
608
+ if (this.modeMultiSelect) {
609
+ return true;
610
+ }
611
+ return this.modeSingleSelect
612
+ && groups.some(e => (e.item as UDExListGroupHeaderBase).collapsible);
613
+ }
614
+
594
615
  get triggerButtonAccessibleName(): string {
595
616
  return this.accessibleName || translate(UDExFilterMenu, SELECT_OPTIONS);
596
617
  }
@@ -19,7 +19,7 @@ export default function FilterMenuTemplate(this: UDExFilterMenu) {
19
19
  aria-label={this.triggerButtonAccessibleName}
20
20
  aria-labelledby={this.accessibleNameRef}
21
21
  aria-expanded={this._open}
22
- aria-haspopup="true"
22
+ aria-haspopup="dialog"
23
23
  role={this.triggerAccessibleRole as AriaRole}
24
24
  aria-controls={`${this._id}_udex-filter-menu-dropdown`}
25
25
  disabled={this.disabled}