@lumx/react 3.0.1 → 3.0.2-alpha-react-utils.2

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 (619) hide show
  1. package/{esm/_internal/useDisableBodyScroll.js → _internal/0062d1bc.js} +1 -1
  2. package/_internal/0062d1bc.js.map +1 -0
  3. package/_internal/03e8323d.d.ts +118 -0
  4. package/_internal/0402f9bc.d.ts +183 -0
  5. package/{esm/_internal/List2.js → _internal/0b370acc.js} +7 -10
  6. package/_internal/0b370acc.js.map +1 -0
  7. package/_internal/0d154d73.d.ts +67 -0
  8. package/_internal/113e3b40.d.ts +31 -0
  9. package/{esm/_internal/InputLabel.js → _internal/12ab39e4.js} +4 -4
  10. package/_internal/12ab39e4.js.map +1 -0
  11. package/{esm/_internal/DatePickerField.js → _internal/13e759f3.js} +10 -14
  12. package/_internal/13e759f3.js.map +1 -0
  13. package/{esm/_internal/SideNavigationItem.js → _internal/158b46d5.js} +8 -8
  14. package/_internal/158b46d5.js.map +1 -0
  15. package/_internal/17b74e16.d.ts +31 -0
  16. package/_internal/1b1530a4.d.ts +43 -0
  17. package/_internal/20976405.js +87 -0
  18. package/_internal/20976405.js.map +1 -0
  19. package/_internal/20b0e9a5.d.ts +77 -0
  20. package/{esm/_internal/Chip2.js → _internal/26cd9c63.js} +4 -4
  21. package/_internal/26cd9c63.js.map +1 -0
  22. package/{esm/_internal/ListSubheader.js → _internal/27f21164.js} +3 -3
  23. package/_internal/27f21164.js.map +1 -0
  24. package/{esm/_internal/constants.js → _internal/288dfd0f.js} +1 -1
  25. package/_internal/288dfd0f.js.map +1 -0
  26. package/_internal/28aaf23a.d.ts +41 -0
  27. package/_internal/2c829c0b.d.ts +57 -0
  28. package/{esm/_internal/useFocusTrap.js → _internal/2cc0aec5.js} +3 -3
  29. package/_internal/2cc0aec5.js.map +1 -0
  30. package/{esm/_internal/types.js → _internal/2d0a5b28.js} +3 -3
  31. package/_internal/2d0a5b28.js.map +1 -0
  32. package/_internal/2d4b5a5e.d.ts +92 -0
  33. package/_internal/2d770113.d.ts +38 -0
  34. package/{esm/_internal/TableRow.js → _internal/2fe97f00.js} +5 -5
  35. package/_internal/2fe97f00.js.map +1 -0
  36. package/_internal/31c16fa0.d.ts +37 -0
  37. package/{esm/_internal/renderLink.js → _internal/329a01d3.js} +2 -2
  38. package/_internal/329a01d3.js.map +1 -0
  39. package/{esm/_internal/SkeletonTypography.js → _internal/3326e990.js} +4 -4
  40. package/_internal/3326e990.js.map +1 -0
  41. package/{esm/_internal/IconButton.js → _internal/377b2f44.js} +7 -11
  42. package/_internal/377b2f44.js.map +1 -0
  43. package/{esm/_internal/CommentBlock.js → _internal/3b8d2a6e.js} +6 -6
  44. package/_internal/3b8d2a6e.js.map +1 -0
  45. package/_internal/3bd3186e.d.ts +57 -0
  46. package/{esm/_internal/ImageBlock.js → _internal/48e40868.js} +5 -5
  47. package/_internal/48e40868.js.map +1 -0
  48. package/{esm/_internal/TextField.js → _internal/490ec1da.js} +10 -10
  49. package/_internal/490ec1da.js.map +1 -0
  50. package/_internal/49127d69.d.ts +52 -0
  51. package/{esm/_internal/Message2.js → _internal/4dcd87cb.js} +5 -5
  52. package/_internal/4dcd87cb.js.map +1 -0
  53. package/{esm/_internal/Dropdown2.js → _internal/4f44d848.js} +6 -6
  54. package/_internal/4f44d848.js.map +1 -0
  55. package/{esm/_internal/partitionMulti.js → _internal/4fc64a2e.js} +2 -2
  56. package/_internal/4fc64a2e.js.map +1 -0
  57. package/_internal/53a831be.js +108 -0
  58. package/_internal/53a831be.js.map +1 -0
  59. package/_internal/55271fa1.d.ts +34 -0
  60. package/_internal/55d30377.d.ts +22 -0
  61. package/{esm/_internal/Switch2.js → _internal/56385b04.js} +7 -7
  62. package/_internal/56385b04.js.map +1 -0
  63. package/_internal/599e250a.d.ts +88 -0
  64. package/_internal/5a054691.d.ts +33 -0
  65. package/{esm/_internal/Avatar2.js → _internal/5a127b58.js} +5 -5
  66. package/_internal/5a127b58.js.map +1 -0
  67. package/{esm/_internal/ExpansionPanel.js → _internal/5a1c0db4.js} +10 -10
  68. package/_internal/5a1c0db4.js.map +1 -0
  69. package/{esm/_internal/RadioGroup.js → _internal/5babcc39.js} +7 -7
  70. package/_internal/5babcc39.js.map +1 -0
  71. package/_internal/5c1bf4d4.d.ts +81 -0
  72. package/_internal/5d8ed4ee.js +113 -0
  73. package/_internal/5d8ed4ee.js.map +1 -0
  74. package/{esm/_internal/Thumbnail2.js → _internal/616f2912.js} +6 -6
  75. package/_internal/616f2912.js.map +1 -0
  76. package/_internal/61f915de.d.ts +49 -0
  77. package/{esm/_internal/ChipGroup.js → _internal/620081fa.js} +4 -4
  78. package/_internal/620081fa.js.map +1 -0
  79. package/{esm/_internal/_rollupPluginBabelHelpers.js → _internal/6340c129.js} +18 -2
  80. package/_internal/6340c129.js.map +1 -0
  81. package/_internal/6581c863.d.ts +34 -0
  82. package/_internal/66de4d45.d.ts +32 -0
  83. package/_internal/6735c5c8.d.ts +62 -0
  84. package/_internal/69dd1472.js +112 -0
  85. package/_internal/69dd1472.js.map +1 -0
  86. package/{esm/_internal/Slider2.js → _internal/6a0e1c77.js} +7 -7
  87. package/_internal/6a0e1c77.js.map +1 -0
  88. package/_internal/701c20b0.d.ts +24 -0
  89. package/{esm/_internal/Progress2.js → _internal/7391188a.js} +4 -4
  90. package/_internal/7391188a.js.map +1 -0
  91. package/{esm/_internal/ButtonRoot.js → _internal/74cb6c26.js} +6 -5
  92. package/_internal/74cb6c26.js.map +1 -0
  93. package/{esm/_internal/ProgressTrackerStepPanel.js → _internal/761031bf.js} +11 -9
  94. package/_internal/761031bf.js.map +1 -0
  95. package/{esm/_internal/DragHandle.js → _internal/76fed69d.js} +5 -5
  96. package/_internal/76fed69d.js.map +1 -0
  97. package/{esm/_internal/type.js → _internal/78ef8e34.js} +1 -1
  98. package/_internal/78ef8e34.js.map +1 -0
  99. package/_internal/7b906e16.d.ts +17 -0
  100. package/_internal/7be11ddc.d.ts +35 -0
  101. package/_internal/7d39705e.d.ts +20 -0
  102. package/{esm/_internal/useDelayedVisibility.js → _internal/7e03266f.js} +2 -2
  103. package/_internal/7e03266f.js.map +1 -0
  104. package/{esm/_internal/Button2.js → _internal/7e8d0ac5.js} +6 -6
  105. package/_internal/7e8d0ac5.js.map +1 -0
  106. package/{esm/_internal/Flag2.js → _internal/7ffa45f6.js} +5 -5
  107. package/_internal/7ffa45f6.js.map +1 -0
  108. package/{esm/_internal/AutocompleteMultiple.js → _internal/84c1ec44.js} +10 -10
  109. package/_internal/84c1ec44.js.map +1 -0
  110. package/{esm/_internal/PostBlock.js → _internal/8518279f.js} +6 -6
  111. package/_internal/8518279f.js.map +1 -0
  112. package/{esm/_internal/mergeRefs.js → _internal/853713cd.js} +1 -1
  113. package/_internal/853713cd.js.map +1 -0
  114. package/_internal/86566d75.d.ts +27 -0
  115. package/_internal/86d22dde.d.ts +57 -0
  116. package/_internal/8e755ded.d.ts +101 -0
  117. package/_internal/901471f5.d.ts +37 -0
  118. package/_internal/935ce959.d.ts +49 -0
  119. package/_internal/97089888.d.ts +16 -0
  120. package/_internal/97cc728c.d.ts +26 -0
  121. package/{esm/_internal/Popover2.js → _internal/9ab3c637.js} +7 -6
  122. package/_internal/9ab3c637.js.map +1 -0
  123. package/{esm/_internal/Toolbar2.js → _internal/9ca3f59c.js} +3 -3
  124. package/_internal/9ca3f59c.js.map +1 -0
  125. package/_internal/9e95ea38.d.ts +43 -0
  126. package/{esm/_internal/Uploader2.js → _internal/a0108f92.js} +5 -5
  127. package/_internal/a0108f92.js.map +1 -0
  128. package/_internal/a493a193.d.ts +65 -0
  129. package/{esm/_internal/Icon2.js → _internal/a521723d.js} +4 -4
  130. package/_internal/a521723d.js.map +1 -0
  131. package/_internal/a6fad025.d.ts +107 -0
  132. package/{esm/_internal/Lightbox2.js → _internal/a8fa525f.js} +13 -12
  133. package/_internal/a8fa525f.js.map +1 -0
  134. package/{esm/_internal/AlertDialog.js → _internal/aca2ecf5.js} +9 -9
  135. package/_internal/aca2ecf5.js.map +1 -0
  136. package/{esm/_internal/Divider2.js → _internal/aef2ef1c.js} +5 -5
  137. package/_internal/aef2ef1c.js.map +1 -0
  138. package/{esm/_internal/Mosaic2.js → _internal/af048b0c.js} +5 -5
  139. package/_internal/af048b0c.js.map +1 -0
  140. package/_internal/af2cd0cd.d.ts +17 -0
  141. package/{esm/_internal/Slides.js → _internal/afec6b62.js} +278 -87
  142. package/_internal/afec6b62.js.map +1 -0
  143. package/{esm/_internal/InputHelper.js → _internal/b0eb3a30.js} +4 -4
  144. package/_internal/b0eb3a30.js.map +1 -0
  145. package/{esm/_internal/Dialog2.js → _internal/b89517ea.js} +14 -13
  146. package/_internal/b89517ea.js.map +1 -0
  147. package/{esm/_internal/Checkbox2.js → _internal/bafa6fcc.js} +8 -8
  148. package/_internal/bafa6fcc.js.map +1 -0
  149. package/{esm/_internal/ButtonGroup.js → _internal/bbbeb49e.js} +3 -7
  150. package/_internal/bbbeb49e.js.map +1 -0
  151. package/_internal/c11f6162.d.ts +52 -0
  152. package/{esm/_internal/Notification2.js → _internal/c723dab4.js} +8 -8
  153. package/_internal/c723dab4.js.map +1 -0
  154. package/_internal/c87cc857.d.ts +42 -0
  155. package/{esm/_internal/SelectMultiple.js → _internal/c97f8d04.js} +13 -13
  156. package/_internal/c97f8d04.js.map +1 -0
  157. package/_internal/cbb373ea.d.ts +6 -0
  158. package/_internal/cbef23b6.d.ts +104 -0
  159. package/_internal/cdf77f06.d.ts +88 -0
  160. package/{esm/_internal/LinkPreview.js → _internal/d350f2ff.js} +6 -6
  161. package/_internal/d350f2ff.js.map +1 -0
  162. package/{esm/_internal/Badge2.js → _internal/d71a8cf7.js} +4 -4
  163. package/_internal/d71a8cf7.js.map +1 -0
  164. package/{esm/_internal/GridItem.js → _internal/d9337952.js} +4 -4
  165. package/_internal/d9337952.js.map +1 -0
  166. package/_internal/def14e1a.d.ts +24 -0
  167. package/_internal/e0cd29c7.d.ts +35 -0
  168. package/{esm/_internal/useRovingTabIndex.js → _internal/e354228f.js} +4 -81
  169. package/_internal/e354228f.js.map +1 -0
  170. package/_internal/e3922a05.d.ts +22 -0
  171. package/_internal/e3cb6177.d.ts +75 -0
  172. package/_internal/e810c841.d.ts +182 -0
  173. package/_internal/ea700b01.d.ts +43 -0
  174. package/_internal/eca6d4dc.d.ts +269 -0
  175. package/{esm/_internal/Link2.js → _internal/eed07003.js} +6 -6
  176. package/_internal/eed07003.js.map +1 -0
  177. package/_internal/f1c9b334.d.ts +22 -0
  178. package/{esm/_internal/TabPanel.js → _internal/f3c3a674.js} +9 -7
  179. package/_internal/f3c3a674.js.map +1 -0
  180. package/{esm/_internal/UserBlock.js → _internal/f571cdcd.js} +6 -6
  181. package/_internal/f571cdcd.js.map +1 -0
  182. package/{esm/_internal/Tooltip2.js → _internal/f5bdff7e.js} +8 -8
  183. package/_internal/f5bdff7e.js.map +1 -0
  184. package/_internal/f851fc00.d.ts +34 -0
  185. package/_internal/f859b007.d.ts +49 -0
  186. package/_internal/fb384b79.d.ts +38 -0
  187. package/_internal/fc4c034b.js +63 -0
  188. package/_internal/fc4c034b.js.map +1 -0
  189. package/{esm/index2.js → _internal/fc608bd9.js} +1 -1
  190. package/_internal/fc608bd9.js.map +1 -0
  191. package/_internal/fd1f4d68.d.ts +36 -0
  192. package/{esm/_internal/getRootClassName.js → _internal/fd867c9d.js} +33 -33
  193. package/_internal/fd867c9d.js.map +1 -0
  194. package/{esm/_internal/FlexBox.js → _internal/ff8081e5.js} +9 -7
  195. package/_internal/ff8081e5.js.map +1 -0
  196. package/{esm/_internal/GenericBlock.js → _internal/ffd1bfe3.js} +7 -9
  197. package/_internal/ffd1bfe3.js.map +1 -0
  198. package/components/alert-dialog.d.ts +6 -0
  199. package/components/alert-dialog.js +2 -0
  200. package/{esm/_internal → components}/alert-dialog.js.map +1 -1
  201. package/components/autocomplete.d.ts +8 -0
  202. package/components/autocomplete.js +2 -0
  203. package/{esm/_internal → components}/autocomplete.js.map +1 -1
  204. package/components/avatar.d.ts +4 -0
  205. package/components/avatar.js +2 -0
  206. package/{esm/_internal → components}/avatar.js.map +1 -1
  207. package/components/badge.d.ts +3 -0
  208. package/components/badge.js +2 -0
  209. package/{esm/_internal → components}/badge.js.map +1 -1
  210. package/components/button.d.ts +8 -0
  211. package/components/button.js +4 -0
  212. package/{esm/_internal → components}/button.js.map +1 -1
  213. package/components/checkbox.d.ts +3 -0
  214. package/components/checkbox.js +2 -0
  215. package/{esm/_internal → components}/checkbox.js.map +1 -1
  216. package/components/chip.d.ts +3 -0
  217. package/components/chip.js +3 -0
  218. package/{esm/_internal → components}/chip.js.map +1 -1
  219. package/components/comment-block.d.ts +5 -0
  220. package/components/comment-block.js +2 -0
  221. package/{esm/_internal → components}/comment-block.js.map +1 -1
  222. package/components/date-picker.d.ts +7 -0
  223. package/components/date-picker.js +2 -0
  224. package/{esm/_internal → components}/date-picker.js.map +1 -1
  225. package/components/dialog.d.ts +3 -0
  226. package/components/dialog.js +2 -0
  227. package/{esm/_internal → components}/dialog.js.map +1 -1
  228. package/components/divider.d.ts +3 -0
  229. package/components/divider.js +2 -0
  230. package/{esm/_internal → components}/divider.js.map +1 -1
  231. package/components/drag-handle.d.ts +3 -0
  232. package/components/drag-handle.js +2 -0
  233. package/{esm/_internal → components}/drag-handle.js.map +1 -1
  234. package/components/dropdown.d.ts +4 -0
  235. package/components/dropdown.js +2 -0
  236. package/{esm/_internal → components}/dropdown.js.map +1 -1
  237. package/components/expansion-panel.d.ts +7 -0
  238. package/components/expansion-panel.js +2 -0
  239. package/components/expansion-panel.js.map +1 -0
  240. package/components/flag.d.ts +3 -0
  241. package/components/flag.js +2 -0
  242. package/{esm/_internal → components}/flag.js.map +1 -1
  243. package/components/flex-box.d.ts +3 -0
  244. package/components/flex-box.js +2 -0
  245. package/{esm/_internal → components}/flex-box.js.map +1 -1
  246. package/components/generic-block.d.ts +4 -0
  247. package/components/generic-block.js +2 -0
  248. package/{esm/_internal → components}/generic-block.js.map +1 -1
  249. package/components/grid.d.ts +3 -0
  250. package/components/grid.js +2 -0
  251. package/{esm/_internal → components}/grid.js.map +1 -1
  252. package/components/heading.d.ts +4 -0
  253. package/components/heading.js +2 -0
  254. package/components/heading.js.map +1 -0
  255. package/components/icon.d.ts +3 -0
  256. package/components/icon.js +2 -0
  257. package/{esm/_internal → components}/icon.js.map +1 -1
  258. package/components/image-block.d.ts +4 -0
  259. package/components/image-block.js +2 -0
  260. package/{esm/_internal → components}/image-block.js.map +1 -1
  261. package/components/input-helper.d.ts +3 -0
  262. package/components/input-helper.js +2 -0
  263. package/{esm/_internal → components}/input-helper.js.map +1 -1
  264. package/components/input-label.d.ts +3 -0
  265. package/components/input-label.js +2 -0
  266. package/{esm/_internal → components}/input-label.js.map +1 -1
  267. package/components/lightbox.d.ts +7 -0
  268. package/components/lightbox.js +2 -0
  269. package/{esm/_internal → components}/lightbox.js.map +1 -1
  270. package/components/link-preview.d.ts +5 -0
  271. package/components/link-preview.js +2 -0
  272. package/{esm/_internal → components}/link-preview.js.map +1 -1
  273. package/components/link.d.ts +3 -0
  274. package/components/link.js +2 -0
  275. package/{esm/_internal → components}/link.js.map +1 -1
  276. package/components/list.d.ts +3 -0
  277. package/components/list.js +3 -0
  278. package/{esm/_internal → components}/list.js.map +1 -1
  279. package/components/message.d.ts +3 -0
  280. package/components/message.js +2 -0
  281. package/{esm/_internal → components}/message.js.map +1 -1
  282. package/components/mosaic.d.ts +4 -0
  283. package/components/mosaic.js +2 -0
  284. package/{esm/_internal → components}/mosaic.js.map +1 -1
  285. package/components/notification.d.ts +3 -0
  286. package/components/notification.js +2 -0
  287. package/{esm/_internal → components}/notification.js.map +1 -1
  288. package/components/popover.d.ts +3 -0
  289. package/components/popover.js +2 -0
  290. package/{esm/_internal → components}/popover.js.map +1 -1
  291. package/components/post-block.d.ts +4 -0
  292. package/components/post-block.js +2 -0
  293. package/{esm/_internal → components}/post-block.js.map +1 -1
  294. package/components/progress-tracker.d.ts +3 -0
  295. package/components/progress-tracker.js +2 -0
  296. package/{esm/_internal → components}/progress-tracker.js.map +1 -1
  297. package/components/progress.d.ts +3 -0
  298. package/components/progress.js +2 -0
  299. package/{esm/_internal → components}/progress.js.map +1 -1
  300. package/components/radio-button.d.ts +3 -0
  301. package/components/radio-button.js +2 -0
  302. package/{esm/_internal → components}/radio-button.js.map +1 -1
  303. package/components/select.d.ts +7 -0
  304. package/components/select.js +2 -0
  305. package/{esm/_internal → components}/select.js.map +1 -1
  306. package/components/side-navigation.d.ts +7 -0
  307. package/components/side-navigation.js +2 -0
  308. package/{esm/_internal → components}/side-navigation.js.map +1 -1
  309. package/components/skeleton.d.ts +3 -0
  310. package/components/skeleton.js +2 -0
  311. package/{esm/_internal → components}/skeleton.js.map +1 -1
  312. package/components/slider.d.ts +3 -0
  313. package/components/slider.js +2 -0
  314. package/{esm/_internal → components}/slider.js.map +1 -1
  315. package/components/slideshow.d.ts +7 -0
  316. package/components/slideshow.js +2 -0
  317. package/{esm/_internal → components}/slideshow.js.map +1 -1
  318. package/components/switch.d.ts +3 -0
  319. package/components/switch.js +2 -0
  320. package/{esm/_internal → components}/switch.js.map +1 -1
  321. package/components/table.d.ts +3 -0
  322. package/components/table.js +2 -0
  323. package/{esm/_internal → components}/table.js.map +1 -1
  324. package/components/tabs.d.ts +4 -0
  325. package/components/tabs.js +2 -0
  326. package/{esm/_internal → components}/tabs.js.map +1 -1
  327. package/components/text-field.d.ts +7 -0
  328. package/components/text-field.js +2 -0
  329. package/{esm/_internal → components}/text-field.js.map +1 -1
  330. package/components/text.d.ts +3 -0
  331. package/components/text.js +2 -0
  332. package/components/text.js.map +1 -0
  333. package/components/thumbnail.d.ts +4 -0
  334. package/components/thumbnail.js +3 -0
  335. package/{esm/_internal → components}/thumbnail.js.map +1 -1
  336. package/components/toolbar.d.ts +3 -0
  337. package/components/toolbar.js +2 -0
  338. package/{esm/_internal → components}/toolbar.js.map +1 -1
  339. package/components/tooltip.d.ts +4 -0
  340. package/components/tooltip.js +2 -0
  341. package/{esm/_internal → components}/tooltip.js.map +1 -1
  342. package/components/uploader.d.ts +3 -0
  343. package/components/uploader.js +2 -0
  344. package/{esm/_internal → components}/uploader.js.map +1 -1
  345. package/components/user-block.d.ts +5 -0
  346. package/components/user-block.js +2 -0
  347. package/{esm/_internal → components}/user-block.js.map +1 -1
  348. package/components.d.ts +2 -0
  349. package/{esm/_internal/components.js → components.js} +2 -1
  350. package/components.js.map +1 -0
  351. package/index.d.ts +56 -0
  352. package/index.js +57 -0
  353. package/{esm/index.js.map → index.js.map} +1 -1
  354. package/package.json +7 -7
  355. package/src/components/alert-dialog/AlertDialog.tsx +2 -1
  356. package/src/components/autocomplete/Autocomplete.tsx +2 -2
  357. package/src/components/autocomplete/AutocompleteMultiple.tsx +2 -1
  358. package/src/components/avatar/Avatar.tsx +2 -1
  359. package/src/components/badge/Badge.test.tsx +1 -1
  360. package/src/components/badge/Badge.tsx +2 -1
  361. package/src/components/button/Button.test.tsx +1 -1
  362. package/src/components/button/Button.tsx +2 -1
  363. package/src/components/button/ButtonGroup.tsx +2 -1
  364. package/src/components/button/ButtonRoot.test.tsx +1 -1
  365. package/src/components/button/ButtonRoot.tsx +2 -1
  366. package/src/components/button/IconButton.tsx +2 -1
  367. package/src/components/checkbox/Checkbox.test.tsx +1 -1
  368. package/src/components/checkbox/Checkbox.tsx +2 -1
  369. package/src/components/chip/Chip.test.tsx +1 -1
  370. package/src/components/chip/Chip.tsx +3 -1
  371. package/src/components/chip/ChipGroup.tsx +2 -1
  372. package/src/components/comment-block/CommentBlock.tsx +2 -1
  373. package/src/components/date-picker/DatePicker.tsx +1 -1
  374. package/src/components/date-picker/DatePickerControlled.tsx +1 -1
  375. package/src/components/date-picker/DatePickerField.tsx +1 -1
  376. package/src/components/date-picker/constants.ts +1 -1
  377. package/src/components/date-picker/types.ts +1 -1
  378. package/src/components/dialog/Dialog.tsx +4 -8
  379. package/src/components/divider/Divider.test.tsx +1 -1
  380. package/src/components/divider/Divider.tsx +3 -2
  381. package/src/components/drag-handle/DragHandle.tsx +2 -1
  382. package/src/components/dropdown/Dropdown.tsx +2 -1
  383. package/src/components/expansion-panel/ExpansionPanel.test.tsx +1 -1
  384. package/src/components/expansion-panel/ExpansionPanel.tsx +3 -10
  385. package/src/components/flag/Flag.test.tsx +1 -1
  386. package/src/components/flag/Flag.tsx +2 -1
  387. package/src/components/flex-box/FlexBox.stories.tsx +68 -4
  388. package/src/components/flex-box/FlexBox.tsx +14 -7
  389. package/src/components/flex-box/__snapshots__/FlexBox.test.tsx.snap +51 -0
  390. package/src/components/generic-block/GenericBlock.stories.jsx +23 -1
  391. package/src/components/generic-block/GenericBlock.tsx +3 -1
  392. package/src/components/grid/Grid.tsx +2 -1
  393. package/src/components/grid/GridItem.tsx +2 -1
  394. package/src/components/heading/Heading.stories.tsx +108 -0
  395. package/src/components/heading/Heading.test.tsx +77 -0
  396. package/src/components/heading/Heading.tsx +63 -0
  397. package/src/components/heading/HeadingLevelProvider.tsx +30 -0
  398. package/src/components/heading/constants.ts +16 -0
  399. package/src/components/heading/context.tsx +13 -0
  400. package/src/components/heading/index.ts +3 -0
  401. package/src/components/heading/useHeadingLevel.tsx +8 -0
  402. package/src/components/icon/Icon.test.tsx +1 -1
  403. package/src/components/icon/Icon.tsx +2 -1
  404. package/src/components/image-block/ImageBlock.tsx +2 -1
  405. package/src/components/index.ts +2 -1
  406. package/src/components/input-helper/InputHelper.tsx +2 -1
  407. package/src/components/input-label/InputLabel.tsx +2 -1
  408. package/src/components/lightbox/Lightbox.tsx +2 -1
  409. package/src/components/link/Link.tsx +2 -1
  410. package/src/components/link-preview/LinkPreview.test.tsx +1 -1
  411. package/src/components/link-preview/LinkPreview.tsx +2 -1
  412. package/src/components/list/List.tsx +2 -1
  413. package/src/components/list/ListDivider.tsx +2 -1
  414. package/src/components/list/ListItem.tsx +3 -8
  415. package/src/components/list/ListSubheader.tsx +2 -1
  416. package/src/components/list/useInteractiveList.tsx +1 -1
  417. package/src/components/message/Message.test.tsx +1 -1
  418. package/src/components/message/Message.tsx +2 -1
  419. package/src/components/mosaic/Mosaic.tsx +2 -1
  420. package/src/components/notification/Notification.tsx +2 -1
  421. package/src/components/popover/Popover.tsx +2 -1
  422. package/src/components/post-block/PostBlock.tsx +2 -1
  423. package/src/components/progress/Progress.tsx +2 -1
  424. package/src/components/progress-tracker/ProgressTracker.tsx +2 -1
  425. package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +1 -1
  426. package/src/components/progress-tracker/ProgressTrackerStep.tsx +2 -1
  427. package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +2 -1
  428. package/src/components/radio-button/RadioButton.test.tsx +1 -1
  429. package/src/components/radio-button/RadioButton.tsx +2 -1
  430. package/src/components/radio-button/RadioGroup.tsx +2 -1
  431. package/src/components/select/Select.test.tsx +1 -1
  432. package/src/components/select/Select.tsx +2 -1
  433. package/src/components/select/SelectMultiple.test.tsx +1 -1
  434. package/src/components/select/SelectMultiple.tsx +2 -1
  435. package/src/components/select/WithSelectContext.tsx +1 -1
  436. package/src/components/select/constants.ts +1 -1
  437. package/src/components/side-navigation/SideNavigation.tsx +2 -1
  438. package/src/components/side-navigation/SideNavigationItem.test.tsx +1 -1
  439. package/src/components/side-navigation/SideNavigationItem.tsx +3 -9
  440. package/src/components/skeleton/SkeletonCircle.tsx +2 -1
  441. package/src/components/skeleton/SkeletonRectangle.tsx +2 -1
  442. package/src/components/skeleton/SkeletonTypography.tsx +2 -1
  443. package/src/components/slider/Slider.tsx +2 -1
  444. package/src/components/slideshow/Slides.tsx +35 -4
  445. package/src/components/slideshow/Slideshow.stories.tsx +98 -2
  446. package/src/components/slideshow/Slideshow.tsx +16 -4
  447. package/src/components/slideshow/SlideshowControls.stories.tsx +1 -1
  448. package/src/components/slideshow/SlideshowControls.tsx +51 -12
  449. package/src/components/slideshow/SlideshowItem.tsx +2 -6
  450. package/src/components/slideshow/SlideshowItemGroup.tsx +64 -0
  451. package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +4 -1
  452. package/src/components/slideshow/useSlideFocusManagement.tsx +92 -0
  453. package/src/components/switch/Switch.test.tsx +1 -1
  454. package/src/components/switch/Switch.tsx +2 -1
  455. package/src/components/table/Table.tsx +2 -1
  456. package/src/components/table/TableBody.tsx +2 -1
  457. package/src/components/table/TableCell.tsx +3 -1
  458. package/src/components/table/TableHeader.tsx +2 -1
  459. package/src/components/table/TableRow.tsx +2 -1
  460. package/src/components/tabs/Tab.test.tsx +1 -1
  461. package/src/components/tabs/Tab.tsx +2 -1
  462. package/src/components/tabs/TabList.test.tsx +1 -1
  463. package/src/components/tabs/TabList.tsx +2 -1
  464. package/src/components/tabs/TabPanel.tsx +2 -1
  465. package/src/components/text/Text.stories.tsx +80 -0
  466. package/src/components/text/Text.test.tsx +62 -0
  467. package/src/components/text/Text.tsx +95 -0
  468. package/src/components/text/index.ts +1 -0
  469. package/src/components/text-field/TextField.test.tsx +1 -1
  470. package/src/components/text-field/TextField.tsx +2 -1
  471. package/src/components/thumbnail/Thumbnail.tsx +2 -1
  472. package/src/components/thumbnail/types.ts +1 -1
  473. package/src/components/toolbar/Toolbar.tsx +2 -1
  474. package/src/components/tooltip/Tooltip.tsx +2 -1
  475. package/src/components/tooltip/useTooltipOpen.tsx +1 -1
  476. package/src/components/uploader/Uploader.test.tsx +1 -1
  477. package/src/components/uploader/Uploader.tsx +2 -1
  478. package/src/components/user-block/UserBlock.tsx +2 -1
  479. package/src/hooks/useCallbackOnEscape.ts +2 -1
  480. package/src/hooks/useClickAway.tsx +1 -1
  481. package/src/hooks/useDisableBodyScroll.ts +1 -1
  482. package/src/hooks/useFocusTrap.ts +1 -1
  483. package/src/hooks/useInterval.tsx +1 -1
  484. package/src/hooks/useOnResize.ts +1 -1
  485. package/src/hooks/useRovingTabIndex.tsx +9 -0
  486. package/src/index.ts +6 -0
  487. package/src/testing/utils/commonTestsSuite.ts +1 -1
  488. package/src/utils/{getRootClassName.ts → className.ts} +2 -0
  489. package/src/utils/event.ts +1 -0
  490. package/src/utils/focus/constants.ts +5 -0
  491. package/src/utils/focus/getFirstAndLastFocusable.ts +4 -10
  492. package/src/utils/focus/getFocusableElements.test.ts +151 -0
  493. package/src/utils/focus/getFocusableElements.ts +7 -0
  494. package/src/utils/index.ts +5 -0
  495. package/src/utils/utils.test.ts +1 -1
  496. package/types.d.ts +96 -11
  497. package/utils/index.d.ts +29 -0
  498. package/utils/index.js +2 -0
  499. package/utils/index.js.map +1 -0
  500. package/esm/_internal/AlertDialog.js.map +0 -1
  501. package/esm/_internal/AutocompleteMultiple.js.map +0 -1
  502. package/esm/_internal/Avatar2.js.map +0 -1
  503. package/esm/_internal/Badge2.js.map +0 -1
  504. package/esm/_internal/Button2.js.map +0 -1
  505. package/esm/_internal/ButtonGroup.js.map +0 -1
  506. package/esm/_internal/ButtonRoot.js.map +0 -1
  507. package/esm/_internal/Checkbox2.js.map +0 -1
  508. package/esm/_internal/Chip2.js.map +0 -1
  509. package/esm/_internal/ChipGroup.js.map +0 -1
  510. package/esm/_internal/ClickAwayProvider.js +0 -213
  511. package/esm/_internal/ClickAwayProvider.js.map +0 -1
  512. package/esm/_internal/CommentBlock.js.map +0 -1
  513. package/esm/_internal/DatePickerField.js.map +0 -1
  514. package/esm/_internal/Dialog2.js.map +0 -1
  515. package/esm/_internal/Divider2.js.map +0 -1
  516. package/esm/_internal/DragHandle.js.map +0 -1
  517. package/esm/_internal/Dropdown2.js.map +0 -1
  518. package/esm/_internal/ExpansionPanel.js.map +0 -1
  519. package/esm/_internal/Flag2.js.map +0 -1
  520. package/esm/_internal/FlexBox.js.map +0 -1
  521. package/esm/_internal/GenericBlock.js.map +0 -1
  522. package/esm/_internal/GridItem.js.map +0 -1
  523. package/esm/_internal/Icon2.js.map +0 -1
  524. package/esm/_internal/IconButton.js.map +0 -1
  525. package/esm/_internal/ImageBlock.js.map +0 -1
  526. package/esm/_internal/InputHelper.js.map +0 -1
  527. package/esm/_internal/InputLabel.js.map +0 -1
  528. package/esm/_internal/Lightbox2.js.map +0 -1
  529. package/esm/_internal/Link2.js.map +0 -1
  530. package/esm/_internal/LinkPreview.js.map +0 -1
  531. package/esm/_internal/List2.js.map +0 -1
  532. package/esm/_internal/ListSubheader.js.map +0 -1
  533. package/esm/_internal/Message2.js.map +0 -1
  534. package/esm/_internal/Mosaic2.js.map +0 -1
  535. package/esm/_internal/Notification2.js.map +0 -1
  536. package/esm/_internal/Popover2.js.map +0 -1
  537. package/esm/_internal/PostBlock.js.map +0 -1
  538. package/esm/_internal/Progress2.js.map +0 -1
  539. package/esm/_internal/ProgressTrackerStepPanel.js.map +0 -1
  540. package/esm/_internal/RadioGroup.js.map +0 -1
  541. package/esm/_internal/SelectMultiple.js.map +0 -1
  542. package/esm/_internal/SideNavigationItem.js.map +0 -1
  543. package/esm/_internal/SkeletonTypography.js.map +0 -1
  544. package/esm/_internal/Slider2.js.map +0 -1
  545. package/esm/_internal/Slides.js.map +0 -1
  546. package/esm/_internal/Switch2.js.map +0 -1
  547. package/esm/_internal/TabPanel.js.map +0 -1
  548. package/esm/_internal/TableRow.js.map +0 -1
  549. package/esm/_internal/TextField.js.map +0 -1
  550. package/esm/_internal/Thumbnail2.js.map +0 -1
  551. package/esm/_internal/Toolbar2.js.map +0 -1
  552. package/esm/_internal/Tooltip2.js.map +0 -1
  553. package/esm/_internal/Uploader2.js.map +0 -1
  554. package/esm/_internal/UserBlock.js.map +0 -1
  555. package/esm/_internal/_rollupPluginBabelHelpers.js.map +0 -1
  556. package/esm/_internal/alert-dialog.js +0 -34
  557. package/esm/_internal/autocomplete.js +0 -32
  558. package/esm/_internal/avatar.js +0 -13
  559. package/esm/_internal/badge.js +0 -10
  560. package/esm/_internal/button.js +0 -25
  561. package/esm/_internal/checkbox.js +0 -14
  562. package/esm/_internal/chip.js +0 -12
  563. package/esm/_internal/comment-block.js +0 -24
  564. package/esm/_internal/components.js.map +0 -1
  565. package/esm/_internal/constants.js.map +0 -1
  566. package/esm/_internal/date-picker.js +0 -32
  567. package/esm/_internal/dialog.js +0 -27
  568. package/esm/_internal/divider.js +0 -10
  569. package/esm/_internal/drag-handle.js +0 -11
  570. package/esm/_internal/dropdown.js +0 -21
  571. package/esm/_internal/expansion-panel.js +0 -32
  572. package/esm/_internal/expansion-panel.js.map +0 -1
  573. package/esm/_internal/flag.js +0 -11
  574. package/esm/_internal/flex-box.js +0 -11
  575. package/esm/_internal/generic-block.js +0 -20
  576. package/esm/_internal/getRootClassName.js.map +0 -1
  577. package/esm/_internal/grid.js +0 -10
  578. package/esm/_internal/icon.js +0 -10
  579. package/esm/_internal/image-block.js +0 -14
  580. package/esm/_internal/input-helper.js +0 -10
  581. package/esm/_internal/input-label.js +0 -10
  582. package/esm/_internal/lightbox.js +0 -27
  583. package/esm/_internal/link-preview.js +0 -15
  584. package/esm/_internal/link.js +0 -12
  585. package/esm/_internal/list.js +0 -15
  586. package/esm/_internal/mergeRefs.js.map +0 -1
  587. package/esm/_internal/message.js +0 -11
  588. package/esm/_internal/mosaic.js +0 -14
  589. package/esm/_internal/notification.js +0 -18
  590. package/esm/_internal/partitionMulti.js.map +0 -1
  591. package/esm/_internal/popover.js +0 -15
  592. package/esm/_internal/post-block.js +0 -15
  593. package/esm/_internal/progress-tracker.js +0 -16
  594. package/esm/_internal/progress.js +0 -10
  595. package/esm/_internal/radio-button.js +0 -13
  596. package/esm/_internal/renderLink.js.map +0 -1
  597. package/esm/_internal/select.js +0 -31
  598. package/esm/_internal/side-navigation.js +0 -25
  599. package/esm/_internal/skeleton.js +0 -10
  600. package/esm/_internal/slider.js +0 -13
  601. package/esm/_internal/slideshow.js +0 -27
  602. package/esm/_internal/switch.js +0 -13
  603. package/esm/_internal/table.js +0 -12
  604. package/esm/_internal/tabs.js +0 -14
  605. package/esm/_internal/text-field.js +0 -26
  606. package/esm/_internal/thumbnail.js +0 -13
  607. package/esm/_internal/toolbar.js +0 -9
  608. package/esm/_internal/tooltip.js +0 -18
  609. package/esm/_internal/type.js.map +0 -1
  610. package/esm/_internal/types.js.map +0 -1
  611. package/esm/_internal/uploader.js +0 -11
  612. package/esm/_internal/useDelayedVisibility.js.map +0 -1
  613. package/esm/_internal/useDisableBodyScroll.js.map +0 -1
  614. package/esm/_internal/useFocusTrap.js.map +0 -1
  615. package/esm/_internal/useRovingTabIndex.js.map +0 -1
  616. package/esm/_internal/user-block.js +0 -17
  617. package/esm/index.js +0 -91
  618. package/esm/index2.js.map +0 -1
  619. package/src/utils/index.tsx +0 -7
@@ -7,15 +7,9 @@ import { mdiChevronDown, mdiChevronUp } from '@lumx/icons';
7
7
 
8
8
  import { Emphasis, Icon, Size, IconButton, IconButtonProps } from '@lumx/react';
9
9
 
10
- import {
11
- Callback,
12
- Comp,
13
- GenericProps,
14
- getRootClassName,
15
- handleBasicClasses,
16
- isComponent,
17
- onEnterPressed,
18
- } from '@lumx/react/utils';
10
+ import { Callback, Comp, GenericProps, isComponent } from '@lumx/react/utils/type';
11
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
12
+ import { onEnterPressed } from '@lumx/react/utils/event';
19
13
  import { renderLink } from '@lumx/react/utils/renderLink';
20
14
 
21
15
  /**
@@ -2,7 +2,8 @@ import classNames from 'classnames';
2
2
  import React, { forwardRef } from 'react';
3
3
 
4
4
  import { GlobalSize, Theme, ColorPalette } from '@lumx/react';
5
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme } from '@lumx/react/utils';
5
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
6
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6
7
 
7
8
  /**
8
9
  * Defines the props of the component.
@@ -2,7 +2,8 @@ import classNames from 'classnames';
2
2
  import React, { forwardRef } from 'react';
3
3
 
4
4
  import { AspectRatio, GlobalSize, Theme, ColorPalette } from '@lumx/react';
5
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme, ValueOf } from '@lumx/react/utils';
5
+ import { Comp, GenericProps, HasTheme, ValueOf } from '@lumx/react/utils/type';
6
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6
7
 
7
8
  /**
8
9
  * Skeleton variants.
@@ -2,7 +2,8 @@ import classNames from 'classnames';
2
2
  import React, { CSSProperties, forwardRef } from 'react';
3
3
 
4
4
  import { Theme, TypographyInterface, ColorPalette } from '@lumx/react';
5
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme } from '@lumx/react/utils';
5
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
6
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6
7
 
7
8
  /**
8
9
  * Defines the props of the component.
@@ -6,7 +6,8 @@ import classNames from 'classnames';
6
6
  import { InputHelper, InputLabel, Theme } from '@lumx/react';
7
7
 
8
8
  import useEventCallback from '@lumx/react/hooks/useEventCallback';
9
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme } from '@lumx/react/utils';
9
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
10
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
10
11
 
11
12
  import { uid } from 'uid';
12
13
  import { clamp } from '@lumx/react/utils/clamp';
@@ -1,9 +1,12 @@
1
- import React, { CSSProperties, forwardRef } from 'react';
1
+ import React, { Children, CSSProperties, forwardRef } from 'react';
2
+ import chunk from 'lodash/chunk';
2
3
 
3
4
  import classNames from 'classnames';
4
5
 
5
6
  import { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
6
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme } from '@lumx/react/utils';
7
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
8
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
9
+ import { buildSlideShowGroupId, SlideshowItemGroup } from './SlideshowItemGroup';
7
10
 
8
11
  export interface SlidesProps extends GenericProps, HasTheme {
9
12
  /** current slide active */
@@ -24,6 +27,13 @@ export interface SlidesProps extends GenericProps, HasTheme {
24
27
  toggleAutoPlay: () => void;
25
28
  /** component to be rendered after the slides */
26
29
  afterSlides?: React.ReactNode;
30
+ /** Whether the slides have controls linked */
31
+ hasControls?: boolean;
32
+ /**
33
+ * Accessible label to set on a slide group.
34
+ * Receives the group position starting from 1 and the total number of groups.
35
+ * */
36
+ slideGroupLabel?: (groupPosition: number, groupTotal: number) => string;
27
37
  }
28
38
 
29
39
  /**
@@ -56,11 +66,22 @@ export const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref)
56
66
  slidesId,
57
67
  children,
58
68
  afterSlides,
69
+ hasControls,
70
+ slideGroupLabel,
59
71
  ...forwardedProps
60
72
  } = props;
73
+ const wrapperRef = React.useRef<HTMLDivElement>(null);
74
+ const startIndexVisible = activeIndex;
75
+ const endIndexVisible = startIndexVisible + 1;
76
+
61
77
  // Inline style of wrapper element.
62
78
  const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };
63
79
 
80
+ const groups = React.useMemo(() => {
81
+ const childrenArray = Children.toArray(children);
82
+ return groupBy && groupBy > 1 ? chunk(childrenArray, groupBy) : childrenArray;
83
+ }, [children, groupBy]);
84
+
64
85
  return (
65
86
  <section
66
87
  id={id}
@@ -79,8 +100,18 @@ export const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref)
79
100
  onMouseLeave={toggleAutoPlay}
80
101
  aria-live={isAutoPlaying ? 'off' : 'polite'}
81
102
  >
82
- <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
83
- {children}
103
+ <div ref={wrapperRef} className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
104
+ {groups.map((group, index) => (
105
+ <SlideshowItemGroup
106
+ key={index}
107
+ id={slidesId && buildSlideShowGroupId(slidesId, index)}
108
+ role={hasControls ? 'tabpanel' : 'group'}
109
+ label={slideGroupLabel ? slideGroupLabel(index + 1, groups.length) : undefined}
110
+ isDisplayed={index >= startIndexVisible && index < endIndexVisible}
111
+ >
112
+ {group}
113
+ </SlideshowItemGroup>
114
+ ))}
84
115
  </div>
85
116
  </div>
86
117
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import range from 'lodash/range';
3
- import { AspectRatio, Button, FlexBox, ImageBlock, Slideshow, SlideshowItem } from '@lumx/react';
3
+ import { AspectRatio, Button, FlexBox, ImageBlock, Slideshow, SlideshowItem, Orientation } from '@lumx/react';
4
4
  import { boolean, number } from '@storybook/addon-knobs';
5
5
  import { thumbnailsKnob } from '@lumx/react/stories/knobs/thumbnailsKnob';
6
6
 
@@ -15,6 +15,7 @@ export const Simple = ({ theme }: any) => {
15
15
 
16
16
  return (
17
17
  <Slideshow
18
+ aria-label="Simple carousel example"
18
19
  activeIndex={activeIndex}
19
20
  autoPlay={autoPlay}
20
21
  interval={interval}
@@ -25,6 +26,7 @@ export const Simple = ({ theme }: any) => {
25
26
  theme={theme}
26
27
  groupBy={groupBy}
27
28
  style={{ width: '50%' }}
29
+ slideGroupLabel={(currentGroup, totalGroup) => `${currentGroup} of ${totalGroup}`}
28
30
  >
29
31
  {images.map(({ image, alt }, index) => (
30
32
  <SlideshowItem key={`${image}-${index}`}>
@@ -48,6 +50,7 @@ export const SimpleWithAutoPlay = ({ theme }: any) => {
48
50
 
49
51
  return (
50
52
  <Slideshow
53
+ aria-label="Simple with autoplay example"
51
54
  activeIndex={activeIndex}
52
55
  autoPlay
53
56
  interval={interval}
@@ -59,6 +62,7 @@ export const SimpleWithAutoPlay = ({ theme }: any) => {
59
62
  theme={theme}
60
63
  groupBy={groupBy}
61
64
  style={{ width: '50%' }}
65
+ slideGroupLabel={(currentGroup, totalGroup) => `${currentGroup} of ${totalGroup}`}
62
66
  >
63
67
  {images.map(({ image, alt }, index) => (
64
68
  <SlideshowItem key={`${image}-${index}`}>
@@ -75,7 +79,7 @@ export const SimpleWithAutoPlay = ({ theme }: any) => {
75
79
  };
76
80
 
77
81
  export const ResponsiveSlideShowSwipe = () => {
78
- const slides = range(3);
82
+ const slides = range(5);
79
83
  return (
80
84
  <>
81
85
  In responsive mode
@@ -86,11 +90,13 @@ export const ResponsiveSlideShowSwipe = () => {
86
90
  </ul>
87
91
  <FlexBox vAlign="center">
88
92
  <Slideshow
93
+ aria-label="Responsive SlideShow Swipe"
89
94
  activeIndex={0}
90
95
  slideshowControlsProps={{
91
96
  nextButtonProps: { label: 'Next' },
92
97
  previousButtonProps: { label: 'Previous' },
93
98
  }}
99
+ slideGroupLabel={(currentGroup, totalGroup) => `${currentGroup} of ${totalGroup}`}
94
100
  >
95
101
  {slides.map((slide) => (
96
102
  <SlideshowItem key={`${slide}`}>
@@ -114,3 +120,93 @@ export const ResponsiveSlideShowSwipe = () => {
114
120
  </>
115
121
  );
116
122
  };
123
+
124
+ const slides = [
125
+ {
126
+ id: 0,
127
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/foyleswarslide__800x600.jpg',
128
+ alt: 'A man in a suit and fedora and a woman with coiffed hair look sternly into the camera.',
129
+ title: 'Foyle’s War Revisited',
130
+ subtitle: '8 pm Sunday, March 8, on TV: Sneak peek at the final season',
131
+ link: '#',
132
+ },
133
+ {
134
+ id: 1,
135
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/britcomdavidslide__800x600.jpg',
136
+ alt: 'British flag with WILL-TV host David Thiel.',
137
+ title: 'Great Britain Vote: 7 pm Sat.',
138
+ link: '#',
139
+ },
140
+ {
141
+ id: 2,
142
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/mag800-2__800x600.jpg',
143
+ alt: 'Mid-American Gardener panelists on the set.',
144
+ title: 'Mid-American Gardener: Thursdays at 7 pm',
145
+ subtitle: 'Watch the latest episode',
146
+ link: '#',
147
+ },
148
+ {
149
+ id: 3,
150
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/foyleswarslide__800x600.jpg',
151
+ alt: 'A man in a suit and fedora and a woman with coiffed hair look sternly into the camera.',
152
+ title: 'Foyle’s War Revisited',
153
+ subtitle: '8 pm Sunday, March 8, on TV: Sneak peek at the final season',
154
+ link: '#',
155
+ },
156
+ {
157
+ id: 4,
158
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/britcomdavidslide__800x600.jpg',
159
+ alt: 'British flag with WILL-TV host David Thiel.',
160
+ title: 'Great Britain Vote: 7 pm Sat.',
161
+ link: '#',
162
+ },
163
+ {
164
+ id: 5,
165
+ src: 'https://www.w3.org/WAI/ARIA/apg/example-index/carousel/images/mag800-2__800x600.jpg',
166
+ alt: 'Mid-American Gardener panelists on the set.',
167
+ title: 'Mid-American Gardener: Thursdays at 7 pm',
168
+ subtitle: 'Watch the latest episode',
169
+ link: '#',
170
+ },
171
+ ];
172
+ export const WithComplexContent = () => (
173
+ <Slideshow
174
+ aria-label="Carousel with complex content"
175
+ activeIndex={0}
176
+ groupBy={2}
177
+ slideshowControlsProps={{
178
+ nextButtonProps: { label: 'Next' },
179
+ previousButtonProps: { label: 'Previous' },
180
+ playButtonProps: { label: 'Play/Pause' },
181
+ paginationItemProps: (index) => ({ label: `Slide ${index + 1}` }),
182
+ }}
183
+ slideGroupLabel={(currentGroup, totalGroup) => `${currentGroup} of ${totalGroup}`}
184
+ >
185
+ {range(number('Slides', 6)).map((nb) => {
186
+ const slide = slides[nb % slides.length];
187
+
188
+ return (
189
+ <SlideshowItem key={slide.id}>
190
+ <a href={slide.link}>
191
+ <ImageBlock
192
+ thumbnailProps={{ aspectRatio: AspectRatio.horizontal, loading: 'eager' }}
193
+ image={slide.src}
194
+ alt={slide.alt}
195
+ />
196
+ </a>
197
+ <FlexBox orientation={Orientation.vertical}>
198
+ <h3>
199
+ <a href={slide.link}>{slide.title}</a>
200
+ {/* Add a non focusable element to test that it stays that way after a page change. */}
201
+ <button type="button" tabIndex={-1} aria-hidden="true">
202
+ Not focusable
203
+ </button>
204
+ <button type="button">Focusable</button>
205
+ </h3>
206
+ {slide.subtitle && <p>{slide.subtitle}</p>}
207
+ </FlexBox>
208
+ </SlideshowItem>
209
+ );
210
+ })}
211
+ </Slideshow>
212
+ );
@@ -2,22 +2,26 @@ import React, { forwardRef } from 'react';
2
2
 
3
3
  import { SlideshowControls, SlideshowControlsProps, Theme, Slides, SlidesProps } from '@lumx/react';
4
4
  import { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';
5
- import { Comp, GenericProps } from '@lumx/react/utils';
5
+ import { Comp, GenericProps } from '@lumx/react/utils/type';
6
6
  import { useFocusWithin } from '@lumx/react/hooks/useFocusWithin';
7
7
  import { mergeRefs } from '@lumx/react/utils/mergeRefs';
8
+ import { buildSlideShowGroupId } from './SlideshowItemGroup';
8
9
 
9
10
  /**
10
11
  * Defines the props of the component.
11
12
  */
12
13
  export interface SlideshowProps
13
14
  extends GenericProps,
14
- Pick<SlidesProps, 'autoPlay' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy'> {
15
+ Pick<SlidesProps, 'autoPlay' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy' | 'slideGroupLabel'> {
15
16
  /** current slide active */
16
17
  activeIndex?: SlidesProps['activeIndex'];
17
18
  /** Interval between each slide when automatic rotation is enabled. */
18
19
  interval?: number;
19
20
  /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */
20
- slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &
21
+ slideshowControlsProps?: Pick<
22
+ SlideshowControlsProps,
23
+ 'nextButtonProps' | 'previousButtonProps' | 'paginationItemProps'
24
+ > &
21
25
  Omit<
22
26
  SlideshowControlsProps,
23
27
  | 'activeIndex'
@@ -61,6 +65,7 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
61
65
  theme,
62
66
  id,
63
67
  slidesId,
68
+ slideGroupLabel,
64
69
  ...forwardedProps
65
70
  } = props;
66
71
  // Number of slideshow items.
@@ -99,6 +104,8 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
99
104
  onFocusOut: startAutoPlay,
100
105
  });
101
106
 
107
+ const showControls = slideshowControlsProps && slidesCount > 1;
108
+
102
109
  return (
103
110
  <Slides
104
111
  activeIndex={currentIndex}
@@ -111,8 +118,9 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
111
118
  autoPlay={autoPlay}
112
119
  slidesId={slideshowSlidesId}
113
120
  toggleAutoPlay={toggleAutoPlay}
114
- interval={interval}
115
121
  ref={mergeRefs(ref, setSlideshow)}
122
+ hasControls={showControls}
123
+ slideGroupLabel={slideGroupLabel}
116
124
  afterSlides={
117
125
  slideshowControlsProps && slidesCount > 1 ? (
118
126
  <div className={`${Slides.className}__controls`}>
@@ -143,6 +151,10 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
143
151
  }
144
152
  : undefined
145
153
  }
154
+ paginationItemProps={(index) => ({
155
+ 'aria-controls': buildSlideShowGroupId(slideshowSlidesId, index),
156
+ ...slideshowControlsProps.paginationItemProps?.(index),
157
+ })}
146
158
  />
147
159
  </div>
148
160
  ) : undefined
@@ -26,6 +26,7 @@ export const Simple = () => {
26
26
  onPaginationClick={onPaginationClick}
27
27
  nextButtonProps={{ label: 'Next' }}
28
28
  previousButtonProps={{ label: 'Previous' }}
29
+ paginationItemLabel={(index) => `Slide ${index}`}
29
30
  />
30
31
  );
31
32
  };
@@ -62,7 +63,6 @@ export const ControllingSlideshow = ({ theme }: any) => {
62
63
  onFocusOut: startAutoPlay,
63
64
  });
64
65
 
65
- /* eslint-disable jsx-a11y/no-noninteractive-tabindex */
66
66
  return (
67
67
  <Slides
68
68
  activeIndex={currentIndex}
@@ -5,12 +5,13 @@ import range from 'lodash/range';
5
5
 
6
6
  import { mdiChevronLeft, mdiChevronRight, mdiPlayCircleOutline, mdiPauseCircleOutline } from '@lumx/icons';
7
7
  import { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';
8
- import { Comp, GenericProps, getRootClassName, handleBasicClasses, HasTheme } from '@lumx/react/utils';
8
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
9
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
9
10
  import { WINDOW } from '@lumx/react/constants';
10
11
  import { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';
12
+ import { useRovingTabIndex } from '@lumx/react/hooks/useRovingTabIndex';
11
13
 
12
14
  import { useSwipeNavigate } from './useSwipeNavigate';
13
- import { useKeyNavigate } from './useKeyNavigate';
14
15
  import { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';
15
16
  import { usePaginationVisibleRange } from './usePaginationVisibleRange';
16
17
 
@@ -28,6 +29,8 @@ export interface SlideshowControlsProps extends GenericProps, HasTheme {
28
29
  /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */
29
30
  previousButtonProps: Pick<IconButtonProps, 'label'> &
30
31
  Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;
32
+ /** Props to pass to the pagination wrapper */
33
+ paginationProps?: Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'role'>;
31
34
  /** Number of slides. */
32
35
  slidesCount: number;
33
36
  /** On next button click callback. */
@@ -38,8 +41,15 @@ export interface SlideshowControlsProps extends GenericProps, HasTheme {
38
41
  onPreviousClick?(loopback?: boolean): void;
39
42
  /** whether the slideshow is currently playing */
40
43
  isAutoPlaying?: boolean;
41
- /** function to be executed in order to retrieve the label for the pagination item */
44
+ /**
45
+ * function to be executed in order to retrieve the label for the pagination item
46
+ * @deprecated Use paginationItemProps instead.
47
+ * */
42
48
  paginationItemLabel?: (index: number) => string;
49
+ /**
50
+ * function to be executed in order to retrieve the props for a pagination item.
51
+ */
52
+ paginationItemProps?: (itemIndex: number) => React.HTMLAttributes<HTMLButtonElement> & { label?: string };
43
53
  /** Props to pass to the lay button (minus those already set by the SlideshowControls props). */
44
54
  playButtonProps?: Pick<IconButtonProps, 'label'> &
45
55
  Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;
@@ -80,11 +90,13 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
80
90
  onPreviousClick,
81
91
  parentRef,
82
92
  previousButtonProps,
93
+ paginationProps,
83
94
  slidesCount,
84
95
  theme,
85
96
  isAutoPlaying = false,
86
97
  playButtonProps,
87
98
  paginationItemLabel,
99
+ paginationItemProps,
88
100
  ...forwardedProps
89
101
  } = props;
90
102
 
@@ -93,8 +105,7 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
93
105
  // Checking window object to avoid errors in SSR.
94
106
  parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;
95
107
  }
96
- // Listen to keyboard navigate left & right.
97
- useKeyNavigate(parent, onNextClick, onPreviousClick);
108
+ const paginationRef = React.useRef(null);
98
109
  // Listen to touch swipe navigate left & right.
99
110
  useSwipeNavigate(
100
111
  parent,
@@ -104,6 +115,18 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
104
115
  useCallback(() => onPreviousClick?.(false), [onPreviousClick]),
105
116
  );
106
117
 
118
+ /**
119
+ * Add roving tab index pattern to pagination items and activate slide on focus.
120
+ */
121
+ useRovingTabIndex({
122
+ parentRef: paginationRef,
123
+ elementSelector: 'button',
124
+ keepTabIndex: true,
125
+ onElementFocus: (element) => {
126
+ element.click();
127
+ },
128
+ });
129
+
107
130
  // Pagination "bullet" range.
108
131
  const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);
109
132
 
@@ -126,8 +149,13 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
126
149
  emphasis={Emphasis.low}
127
150
  onClick={onPreviousClick}
128
151
  />
129
- <div className={`${CLASSNAME}__pagination`}>
130
- <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>
152
+ <div ref={paginationRef} className={`${CLASSNAME}__pagination`}>
153
+ <div
154
+ className={`${CLASSNAME}__pagination-items`}
155
+ style={wrapperStyle}
156
+ role="tablist"
157
+ {...paginationProps}
158
+ >
131
159
  {useMemo(
132
160
  () =>
133
161
  range(slidesCount).map((index) => {
@@ -137,6 +165,15 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
137
165
  (index === visibleRange.min || index === visibleRange.max);
138
166
  const isActive = activeIndex === index;
139
167
  const isOutRange = index < visibleRange.min || index > visibleRange.max;
168
+ const {
169
+ className: itemClassName = undefined,
170
+ label = undefined,
171
+ ...itemProps
172
+ } = paginationItemProps ? paginationItemProps(index) : {};
173
+
174
+ const ariaLabel =
175
+ label || paginationItemLabel?.(index) || `${index + 1} / ${slidesCount}`;
176
+
140
177
  return (
141
178
  <button
142
179
  className={classNames(
@@ -146,15 +183,16 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
146
183
  isOnEdge,
147
184
  isOutRange,
148
185
  }),
186
+ itemClassName,
149
187
  )}
150
188
  key={index}
151
189
  type="button"
190
+ tabIndex={isActive ? undefined : -1}
191
+ role="tab"
192
+ aria-selected={isActive}
152
193
  onClick={() => onPaginationClick?.(index)}
153
- {...{
154
- 'aria-label': paginationItemLabel
155
- ? paginationItemLabel(index)
156
- : `${index + 1} / ${slidesCount}`,
157
- }}
194
+ aria-label={ariaLabel}
195
+ {...itemProps}
158
196
  />
159
197
  );
160
198
  }),
@@ -163,6 +201,7 @@ const InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> =
163
201
  visibleRange.min,
164
202
  visibleRange.max,
165
203
  activeIndex,
204
+ paginationItemProps,
166
205
  paginationItemLabel,
167
206
  onPaginationClick,
168
207
  ],
@@ -2,14 +2,13 @@ import React, { forwardRef } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
5
- import { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
5
+ import { Comp, GenericProps } from '@lumx/react/utils/type';
6
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6
7
 
7
8
  /**
8
9
  * Defines the props of the component.
9
10
  */
10
11
  export interface SlideshowItemProps extends GenericProps {
11
- /** whether the slideshow item is currently visible */
12
- isCurrentlyVisible?: boolean;
13
12
  /** interval in which slides are automatically shown */
14
13
  interval?: number;
15
14
  }
@@ -33,7 +32,6 @@ const CLASSNAME = getRootClassName(COMPONENT_NAME);
33
32
  */
34
33
  export const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {
35
34
  const { className, children, ...forwardedProps } = props;
36
-
37
35
  return (
38
36
  <div
39
37
  ref={ref}
@@ -43,8 +41,6 @@ export const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRe
43
41
  prefix: CLASSNAME,
44
42
  }),
45
43
  )}
46
- aria-roledescription="slide"
47
- role="group"
48
44
  {...forwardedProps}
49
45
  >
50
46
  {children}
@@ -0,0 +1,64 @@
1
+ import React, { forwardRef } from 'react';
2
+
3
+ import classNames from 'classnames';
4
+ import { mergeRefs } from '@lumx/react/utils/mergeRefs';
5
+
6
+ import { Comp, GenericProps } from '@lumx/react/utils/type';
7
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
8
+ import { useSlideFocusManagement } from './useSlideFocusManagement';
9
+
10
+ /**
11
+ * Defines the props of the component.
12
+ */
13
+ export interface SlideshowItemGroupProps extends GenericProps {
14
+ role?: 'tabpanel' | 'group';
15
+ label?: string;
16
+ isDisplayed?: boolean;
17
+ }
18
+
19
+ /**
20
+ * Component display name.
21
+ */
22
+ const COMPONENT_NAME = 'SlideshowItemGroup';
23
+
24
+ /**
25
+ * Component default class name and class prefix.
26
+ */
27
+ export const CLASSNAME = getRootClassName(COMPONENT_NAME);
28
+
29
+ export const buildSlideShowGroupId = (slidesId: string, index: number) => `${slidesId}-slide-${index}`;
30
+
31
+ /**
32
+ * SlideshowItemGroup component.
33
+ *
34
+ * @param props Component props.
35
+ * @param ref Component ref.
36
+ * @return React element.
37
+ */
38
+ export const SlideshowItemGroup: Comp<SlideshowItemGroupProps, HTMLDivElement> = forwardRef((props, ref) => {
39
+ const { className, children, role = 'group', label, isDisplayed, ...forwardedProps } = props;
40
+ const groupRef = React.useRef<HTMLDivElement>(null);
41
+
42
+ useSlideFocusManagement({ isSlideDisplayed: isDisplayed, slideRef: groupRef });
43
+
44
+ return (
45
+ <div
46
+ ref={mergeRefs(groupRef, ref)}
47
+ role={role}
48
+ className={classNames(
49
+ className,
50
+ handleBasicClasses({
51
+ prefix: CLASSNAME,
52
+ }),
53
+ )}
54
+ aria-roledescription="slide"
55
+ aria-label={label}
56
+ {...forwardedProps}
57
+ >
58
+ {children}
59
+ </div>
60
+ );
61
+ });
62
+
63
+ SlideshowItemGroup.displayName = COMPONENT_NAME;
64
+ SlideshowItemGroup.className = CLASSNAME;
@@ -20,6 +20,7 @@ Array [
20
20
  onNextClick={[Function]}
21
21
  onPaginationClick={[Function]}
22
22
  onPreviousClick={[Function]}
23
+ paginationItemProps={[Function]}
23
24
  parentRef={null}
24
25
  previousButtonProps={
25
26
  Object {
@@ -32,11 +33,13 @@ Array [
32
33
  />
33
34
  </div>
34
35
  }
36
+ aria-label="Simple carousel example"
35
37
  autoPlay={false}
36
38
  groupBy={1}
39
+ hasControls={true}
37
40
  id="slideshow1"
38
- interval={1000}
39
41
  isAutoPlaying={false}
42
+ slideGroupLabel={[Function]}
40
43
  slidesId="slideshow-slides2"
41
44
  style={
42
45
  Object {