@lumx/react 2.2.6 → 2.2.9-alpha-exported-hooks1

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 (296) hide show
  1. package/esm/_internal/{_rollupPluginBabelHelpers.js → _rolluppluginbabelhelpers.53.js} +1 -1
  2. package/esm/_internal/_rolluppluginbabelhelpers.53.js.map +1 -0
  3. package/esm/_internal/alert-dialog.js +19 -19
  4. package/esm/_internal/{AlertDialog.js → alertdialog.1.js} +8 -8
  5. package/esm/_internal/alertdialog.1.js.map +1 -0
  6. package/esm/_internal/autocomplete.js +20 -21
  7. package/esm/_internal/autocomplete.js.map +1 -1
  8. package/esm/_internal/{AutocompleteMultiple.js → autocompletemultiple.2.js} +9 -9
  9. package/esm/_internal/autocompletemultiple.2.js.map +1 -0
  10. package/esm/_internal/{Avatar2.js → avatar.3.js} +4 -4
  11. package/esm/_internal/avatar.3.js.map +1 -0
  12. package/esm/_internal/avatar.js +6 -6
  13. package/esm/_internal/{Badge2.js → badge.4.js} +3 -3
  14. package/esm/_internal/badge.4.js.map +1 -0
  15. package/esm/_internal/badge.js +3 -3
  16. package/esm/_internal/{Button2.js → button.5.js} +5 -5
  17. package/esm/_internal/button.5.js.map +1 -0
  18. package/esm/_internal/button.js +14 -15
  19. package/esm/_internal/button.js.map +1 -1
  20. package/esm/_internal/{ButtonGroup.js → buttongroup.7.js} +3 -3
  21. package/esm/_internal/buttongroup.7.js.map +1 -0
  22. package/esm/_internal/{ButtonRoot.js → buttonroot.57.js} +4 -4
  23. package/esm/_internal/buttonroot.57.js.map +1 -0
  24. package/esm/_internal/{Checkbox2.js → checkbox.8.js} +7 -7
  25. package/esm/_internal/checkbox.8.js.map +1 -0
  26. package/esm/_internal/checkbox.js +7 -7
  27. package/esm/_internal/{Chip2.js → chip.9.js} +3 -3
  28. package/esm/_internal/chip.9.js.map +1 -0
  29. package/esm/_internal/chip.js +4 -4
  30. package/esm/_internal/{ChipGroup.js → chipgroup.10.js} +3 -3
  31. package/esm/_internal/chipgroup.10.js.map +1 -0
  32. package/esm/_internal/{ClickAwayProvider.js → clickawayprovider.60.js} +4 -4
  33. package/esm/_internal/clickawayprovider.60.js.map +1 -0
  34. package/esm/_internal/comment-block.js +7 -7
  35. package/esm/_internal/{CommentBlock.js → commentblock.11.js} +4 -4
  36. package/esm/_internal/commentblock.11.js.map +1 -0
  37. package/esm/_internal/components.js +1 -1
  38. package/esm/_internal/{constants.js → constants.59.js} +1 -1
  39. package/esm/_internal/constants.59.js.map +1 -0
  40. package/esm/_internal/date-picker.js +18 -19
  41. package/esm/_internal/date-picker.js.map +1 -1
  42. package/esm/_internal/{DatePickerField.js → datepickerfield.12.js} +9 -9
  43. package/esm/_internal/datepickerfield.12.js.map +1 -0
  44. package/esm/_internal/{Dialog2.js → dialog.13.js} +12 -12
  45. package/esm/_internal/dialog.13.js.map +1 -0
  46. package/esm/_internal/dialog.js +12 -12
  47. package/esm/_internal/{Divider2.js → divider.14.js} +3 -3
  48. package/esm/_internal/divider.14.js.map +1 -0
  49. package/esm/_internal/divider.js +3 -3
  50. package/esm/_internal/drag-handle.js +4 -4
  51. package/esm/_internal/{DragHandle.js → draghandle.15.js} +4 -4
  52. package/esm/_internal/draghandle.15.js.map +1 -0
  53. package/esm/_internal/{Dropdown2.js → dropdown.16.js} +6 -6
  54. package/esm/_internal/dropdown.16.js.map +1 -0
  55. package/esm/_internal/dropdown.js +10 -10
  56. package/esm/_internal/expansion-panel.js +16 -17
  57. package/esm/_internal/expansion-panel.js.map +1 -1
  58. package/esm/_internal/{ExpansionPanel.js → expansionpanel.17.js} +8 -8
  59. package/esm/_internal/expansionpanel.17.js.map +1 -0
  60. package/esm/_internal/{Flag2.js → flag.18.js} +4 -4
  61. package/esm/_internal/flag.18.js.map +1 -0
  62. package/esm/_internal/flag.js +4 -4
  63. package/esm/_internal/flex-box.js +3 -3
  64. package/esm/_internal/{FlexBox.js → flexbox.19.js} +3 -3
  65. package/esm/_internal/flexbox.19.js.map +1 -0
  66. package/esm/_internal/{getRootClassName.js → getrootclassname.54.js} +21 -3
  67. package/esm/_internal/getrootclassname.54.js.map +1 -0
  68. package/esm/_internal/grid.js +3 -3
  69. package/esm/_internal/{GridItem.js → griditem.20.js} +3 -3
  70. package/esm/_internal/griditem.20.js.map +1 -0
  71. package/esm/_internal/{Icon2.js → icon.21.js} +8 -5
  72. package/esm/_internal/icon.21.js.map +1 -0
  73. package/esm/_internal/icon.js +3 -3
  74. package/esm/_internal/{IconButton.js → iconbutton.6.js} +6 -6
  75. package/esm/_internal/iconbutton.6.js.map +1 -0
  76. package/esm/_internal/image-block.js +6 -6
  77. package/esm/_internal/{ImageBlock.js → imageblock.22.js} +4 -4
  78. package/esm/_internal/imageblock.22.js.map +1 -0
  79. package/esm/{index2.js → _internal/index.55.js} +1 -1
  80. package/esm/_internal/index.55.js.map +1 -0
  81. package/esm/_internal/input-helper.js +3 -3
  82. package/esm/_internal/input-label.js +3 -3
  83. package/esm/_internal/{InputHelper.js → inputhelper.23.js} +3 -3
  84. package/esm/_internal/inputhelper.23.js.map +1 -0
  85. package/esm/_internal/{InputLabel.js → inputlabel.24.js} +3 -3
  86. package/esm/_internal/inputlabel.24.js.map +1 -0
  87. package/esm/_internal/{Lightbox2.js → lightbox.25.js} +17 -15
  88. package/esm/_internal/lightbox.25.js.map +1 -0
  89. package/esm/_internal/lightbox.js +16 -17
  90. package/esm/_internal/lightbox.js.map +1 -1
  91. package/esm/_internal/link-preview.js +8 -8
  92. package/esm/_internal/{Link2.js → link.26.js} +5 -5
  93. package/esm/_internal/link.26.js.map +1 -0
  94. package/esm/_internal/link.js +5 -5
  95. package/esm/_internal/{LinkPreview.js → linkpreview.27.js} +5 -5
  96. package/esm/_internal/linkpreview.27.js.map +1 -0
  97. package/esm/_internal/{List2.js → list.28.js} +6 -6
  98. package/esm/_internal/list.28.js.map +1 -0
  99. package/esm/_internal/list.js +7 -7
  100. package/esm/_internal/{ListSubheader.js → listsubheader.29.js} +3 -3
  101. package/esm/_internal/listsubheader.29.js.map +1 -0
  102. package/esm/_internal/{mergeRefs.js → mergerefs.56.js} +1 -1
  103. package/esm/_internal/mergerefs.56.js.map +1 -0
  104. package/esm/_internal/{Message2.js → message.30.js} +4 -4
  105. package/esm/_internal/message.30.js.map +1 -0
  106. package/esm/_internal/message.js +4 -4
  107. package/esm/_internal/{Mosaic2.js → mosaic.31.js} +4 -4
  108. package/esm/_internal/mosaic.31.js.map +1 -0
  109. package/esm/_internal/mosaic.js +6 -6
  110. package/esm/_internal/{Notification2.js → notification.32.js} +9 -8
  111. package/esm/_internal/notification.32.js.map +1 -0
  112. package/esm/_internal/notification.js +9 -9
  113. package/esm/_internal/{partitionMulti.js → partitionmulti.62.js} +1 -1
  114. package/esm/_internal/partitionmulti.62.js.map +1 -0
  115. package/esm/_internal/{Popover2.js → popover.33.js} +6 -6
  116. package/esm/_internal/popover.33.js.map +1 -0
  117. package/esm/_internal/popover.js +6 -6
  118. package/esm/_internal/post-block.js +7 -7
  119. package/esm/_internal/{PostBlock.js → postblock.34.js} +5 -5
  120. package/esm/_internal/postblock.34.js.map +1 -0
  121. package/esm/_internal/progress-tracker.js +9 -9
  122. package/esm/_internal/{Progress2.js → progress.35.js} +3 -3
  123. package/esm/_internal/progress.35.js.map +1 -0
  124. package/esm/_internal/progress.js +3 -3
  125. package/esm/_internal/{ProgressTrackerStepPanel.js → progresstrackersteppanel.36.js} +8 -8
  126. package/esm/_internal/progresstrackersteppanel.36.js.map +1 -0
  127. package/esm/_internal/radio-button.js +6 -6
  128. package/esm/_internal/{RadioGroup.js → radiogroup.37.js} +6 -6
  129. package/esm/_internal/radiogroup.37.js.map +1 -0
  130. package/esm/_internal/{renderLink.js → renderlink.65.js} +2 -2
  131. package/esm/_internal/renderlink.65.js.map +1 -0
  132. package/esm/_internal/select.js +19 -20
  133. package/esm/_internal/select.js.map +1 -1
  134. package/esm/_internal/{SelectMultiple.js → selectmultiple.38.js} +12 -12
  135. package/esm/_internal/selectmultiple.38.js.map +1 -0
  136. package/esm/_internal/side-navigation.js +14 -15
  137. package/esm/_internal/side-navigation.js.map +1 -1
  138. package/esm/_internal/{SideNavigationItem.js → sidenavigationitem.39.js} +7 -7
  139. package/esm/_internal/sidenavigationitem.39.js.map +1 -0
  140. package/esm/_internal/skeleton.js +3 -3
  141. package/esm/_internal/{SkeletonTypography.js → skeletontypography.40.js} +3 -3
  142. package/esm/_internal/skeletontypography.40.js.map +1 -0
  143. package/esm/_internal/{Slider2.js → slider.41.js} +6 -6
  144. package/esm/_internal/slider.41.js.map +1 -0
  145. package/esm/_internal/slider.js +6 -6
  146. package/esm/_internal/slideshow.js +15 -14
  147. package/esm/_internal/slideshow.js.map +1 -1
  148. package/esm/_internal/{SlideshowControls.js → slideshowcontrols.42.js} +218 -101
  149. package/esm/_internal/slideshowcontrols.42.js.map +1 -0
  150. package/esm/_internal/{Switch2.js → switch.43.js} +6 -6
  151. package/esm/_internal/switch.43.js.map +1 -0
  152. package/esm/_internal/switch.js +6 -6
  153. package/esm/_internal/table.js +4 -4
  154. package/esm/_internal/{TableRow.js → tablerow.44.js} +4 -4
  155. package/esm/_internal/tablerow.44.js.map +1 -0
  156. package/esm/_internal/{TabPanel.js → tabpanel.45.js} +6 -6
  157. package/esm/_internal/tabpanel.45.js.map +1 -0
  158. package/esm/_internal/tabs.js +7 -7
  159. package/esm/_internal/text-field.js +15 -16
  160. package/esm/_internal/text-field.js.map +1 -1
  161. package/esm/_internal/{TextField.js → textfield.46.js} +9 -9
  162. package/esm/_internal/textfield.46.js.map +1 -0
  163. package/esm/_internal/{Thumbnail2.js → thumbnail.47.js} +7 -7
  164. package/esm/_internal/thumbnail.47.js.map +1 -0
  165. package/esm/_internal/thumbnail.js +6 -6
  166. package/esm/_internal/{Toolbar2.js → toolbar.49.js} +3 -3
  167. package/esm/_internal/toolbar.49.js.map +1 -0
  168. package/esm/_internal/toolbar.js +3 -3
  169. package/esm/_internal/{Tooltip2.js → tooltip.50.js} +116 -119
  170. package/esm/_internal/tooltip.50.js.map +1 -0
  171. package/esm/_internal/tooltip.js +8 -9
  172. package/esm/_internal/tooltip.js.map +1 -1
  173. package/esm/_internal/{type.js → type.64.js} +1 -1
  174. package/esm/_internal/type.64.js.map +1 -0
  175. package/esm/_internal/{types.js → types.48.js} +2 -3
  176. package/esm/_internal/types.48.js.map +1 -0
  177. package/esm/_internal/{Uploader2.js → uploader.51.js} +4 -4
  178. package/esm/_internal/uploader.51.js.map +1 -0
  179. package/esm/_internal/uploader.js +4 -4
  180. package/esm/_internal/{useDelayedVisibility.js → usedelayedvisibility.63.js} +2 -2
  181. package/esm/_internal/usedelayedvisibility.63.js.map +1 -0
  182. package/esm/_internal/{useDisableBodyScroll.js → usedisablebodyscroll.61.js} +1 -1
  183. package/esm/_internal/usedisablebodyscroll.61.js.map +1 -0
  184. package/esm/_internal/{useFocusTrap.js → usefocustrap.58.js} +2 -2
  185. package/esm/_internal/usefocustrap.58.js.map +1 -0
  186. package/esm/_internal/user-block.js +9 -9
  187. package/esm/_internal/{UserBlock.js → userblock.52.js} +5 -5
  188. package/esm/_internal/userblock.52.js.map +1 -0
  189. package/esm/_internal/{useRovingTabIndex.js → userovingtabindex.66.js} +3 -3
  190. package/esm/_internal/userovingtabindex.66.js.map +1 -0
  191. package/hooks/useFocusWithin.d.ts +16 -0
  192. package/hooks/useFocusWithin.js +28 -0
  193. package/hooks/useFocusWithin.js.map +1 -0
  194. package/index.d.ts +2723 -0
  195. package/index.js +90 -0
  196. package/{esm/index.js.map → index.js.map} +1 -1
  197. package/package.json +9 -10
  198. package/src/components/alert-dialog/AlertDialog.test.tsx +1 -0
  199. package/src/components/autocomplete/AutocompleteMultiple.tsx +3 -1
  200. package/src/components/button/__snapshots__/IconButton.test.tsx.snap +0 -5
  201. package/src/components/icon/Icon.tsx +6 -2
  202. package/src/components/image-block/ImageBlock.stories.tsx +1 -2
  203. package/src/components/lightbox/Lightbox.stories.tsx +1 -0
  204. package/src/components/lightbox/Lightbox.tsx +5 -3
  205. package/src/components/notification/Notification.tsx +1 -0
  206. package/src/components/select/SelectMultiple.tsx +0 -1
  207. package/src/components/slideshow/Slideshow.stories.tsx +1 -1
  208. package/src/components/slideshow/Slideshow.tsx +76 -112
  209. package/src/components/slideshow/SlideshowControls.stories.tsx +18 -12
  210. package/src/components/slideshow/SlideshowControls.tsx +11 -7
  211. package/src/components/slideshow/SlideshowItem.tsx +4 -1
  212. package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +52 -17
  213. package/src/components/tabs/state.ts +0 -1
  214. package/src/components/thumbnail/Thumbnail.stories.tsx +25 -1
  215. package/src/components/thumbnail/Thumbnail.test.tsx +9 -1
  216. package/src/components/thumbnail/Thumbnail.tsx +3 -0
  217. package/src/components/thumbnail/__snapshots__/Thumbnail.test.tsx.snap +26 -0
  218. package/src/components/thumbnail/index.ts +0 -1
  219. package/src/components/tooltip/Tooltip.tsx +1 -2
  220. package/src/components/tooltip/useTooltipOpen.tsx +90 -91
  221. package/src/constants.ts +7 -1
  222. package/src/hooks/useFocusWithin.ts +33 -0
  223. package/src/hooks/useSlideshowControls.ts +213 -0
  224. package/src/utils/browserDoesNotSupportHover.test.js +24 -0
  225. package/src/utils/browserDoesNotSupportHover.ts +2 -0
  226. package/src/utils/index.tsx +0 -2
  227. package/src/utils/mergeRefs.ts +1 -1
  228. package/esm/_internal/AlertDialog.js.map +0 -1
  229. package/esm/_internal/AutocompleteMultiple.js.map +0 -1
  230. package/esm/_internal/Avatar2.js.map +0 -1
  231. package/esm/_internal/Badge2.js.map +0 -1
  232. package/esm/_internal/Button2.js.map +0 -1
  233. package/esm/_internal/ButtonGroup.js.map +0 -1
  234. package/esm/_internal/ButtonRoot.js.map +0 -1
  235. package/esm/_internal/Checkbox2.js.map +0 -1
  236. package/esm/_internal/Chip2.js.map +0 -1
  237. package/esm/_internal/ChipGroup.js.map +0 -1
  238. package/esm/_internal/ClickAwayProvider.js.map +0 -1
  239. package/esm/_internal/CommentBlock.js.map +0 -1
  240. package/esm/_internal/DatePickerField.js.map +0 -1
  241. package/esm/_internal/Dialog2.js.map +0 -1
  242. package/esm/_internal/Divider2.js.map +0 -1
  243. package/esm/_internal/DragHandle.js.map +0 -1
  244. package/esm/_internal/Dropdown2.js.map +0 -1
  245. package/esm/_internal/ExpansionPanel.js.map +0 -1
  246. package/esm/_internal/Flag2.js.map +0 -1
  247. package/esm/_internal/FlexBox.js.map +0 -1
  248. package/esm/_internal/GridItem.js.map +0 -1
  249. package/esm/_internal/Icon2.js.map +0 -1
  250. package/esm/_internal/IconButton.js.map +0 -1
  251. package/esm/_internal/ImageBlock.js.map +0 -1
  252. package/esm/_internal/InputHelper.js.map +0 -1
  253. package/esm/_internal/InputLabel.js.map +0 -1
  254. package/esm/_internal/Lightbox2.js.map +0 -1
  255. package/esm/_internal/Link2.js.map +0 -1
  256. package/esm/_internal/LinkPreview.js.map +0 -1
  257. package/esm/_internal/List2.js.map +0 -1
  258. package/esm/_internal/ListSubheader.js.map +0 -1
  259. package/esm/_internal/Message2.js.map +0 -1
  260. package/esm/_internal/Mosaic2.js.map +0 -1
  261. package/esm/_internal/Notification2.js.map +0 -1
  262. package/esm/_internal/Popover2.js.map +0 -1
  263. package/esm/_internal/PostBlock.js.map +0 -1
  264. package/esm/_internal/Progress2.js.map +0 -1
  265. package/esm/_internal/ProgressTrackerStepPanel.js.map +0 -1
  266. package/esm/_internal/RadioGroup.js.map +0 -1
  267. package/esm/_internal/SelectMultiple.js.map +0 -1
  268. package/esm/_internal/SideNavigationItem.js.map +0 -1
  269. package/esm/_internal/SkeletonTypography.js.map +0 -1
  270. package/esm/_internal/Slider2.js.map +0 -1
  271. package/esm/_internal/SlideshowControls.js.map +0 -1
  272. package/esm/_internal/Switch2.js.map +0 -1
  273. package/esm/_internal/TabPanel.js.map +0 -1
  274. package/esm/_internal/TableRow.js.map +0 -1
  275. package/esm/_internal/TextField.js.map +0 -1
  276. package/esm/_internal/Thumbnail2.js.map +0 -1
  277. package/esm/_internal/Toolbar2.js.map +0 -1
  278. package/esm/_internal/Tooltip2.js.map +0 -1
  279. package/esm/_internal/Uploader2.js.map +0 -1
  280. package/esm/_internal/UserBlock.js.map +0 -1
  281. package/esm/_internal/_rollupPluginBabelHelpers.js.map +0 -1
  282. package/esm/_internal/constants.js.map +0 -1
  283. package/esm/_internal/getRootClassName.js.map +0 -1
  284. package/esm/_internal/mergeRefs.js.map +0 -1
  285. package/esm/_internal/partitionMulti.js.map +0 -1
  286. package/esm/_internal/renderLink.js.map +0 -1
  287. package/esm/_internal/type.js.map +0 -1
  288. package/esm/_internal/types.js.map +0 -1
  289. package/esm/_internal/useDelayedVisibility.js.map +0 -1
  290. package/esm/_internal/useDisableBodyScroll.js.map +0 -1
  291. package/esm/_internal/useFocusTrap.js.map +0 -1
  292. package/esm/_internal/useRovingTabIndex.js.map +0 -1
  293. package/esm/index.js +0 -89
  294. package/esm/index2.js.map +0 -1
  295. package/src/utils/htmlDecode.ts +0 -13
  296. package/types.d.ts +0 -2575
package/index.js ADDED
@@ -0,0 +1,90 @@
1
+ import './esm/_internal/_rolluppluginbabelhelpers.53.js';
2
+ export { Alignment, AspectRatio, ColorPalette, ColorVariant, Emphasis, Kind, Orientation, Size, Theme, Typography, TypographyInterface, TypographyTitleCustom } from './esm/_internal/components.js';
3
+ import 'react';
4
+ import './esm/_internal/getrootclassname.54.js';
5
+ export { I as Icon } from './esm/_internal/icon.21.js';
6
+ import './esm/_internal/index.55.js';
7
+ import 'lodash/isBoolean';
8
+ import 'lodash/isEmpty';
9
+ import 'lodash/kebabCase';
10
+ import 'lodash/noop';
11
+ import './esm/_internal/constants.59.js';
12
+ import 'lodash/concat';
13
+ import 'lodash/dropRight';
14
+ import 'lodash/last';
15
+ import 'lodash/partition';
16
+ import 'lodash/reduce';
17
+ import './esm/_internal/partitionmulti.62.js';
18
+ import 'lodash/get';
19
+ import './esm/_internal/type.64.js';
20
+ export { A as AlertDialog } from './esm/_internal/alertdialog.1.js';
21
+ export { P as Placement, a as Popover } from './esm/_internal/popover.33.js';
22
+ import './esm/_internal/mergerefs.56.js';
23
+ export { A as Autocomplete, a as AutocompleteMultiple } from './esm/_internal/autocompletemultiple.2.js';
24
+ export { A as Avatar } from './esm/_internal/avatar.3.js';
25
+ export { B as Badge } from './esm/_internal/badge.4.js';
26
+ import './esm/_internal/renderlink.65.js';
27
+ import './esm/_internal/buttonroot.57.js';
28
+ export { a as Button, B as ButtonEmphasis } from './esm/_internal/button.5.js';
29
+ export { I as IconButton } from './esm/_internal/iconbutton.6.js';
30
+ export { B as ButtonGroup } from './esm/_internal/buttongroup.7.js';
31
+ export { C as Checkbox } from './esm/_internal/checkbox.8.js';
32
+ import 'lodash/isFunction';
33
+ export { C as Chip } from './esm/_internal/chip.9.js';
34
+ export { C as ChipGroup } from './esm/_internal/chipgroup.10.js';
35
+ export { a as CommentBlock, C as CommentBlockVariant } from './esm/_internal/commentblock.11.js';
36
+ import 'moment';
37
+ export { D as DatePicker, a as DatePickerControlled, b as DatePickerField } from './esm/_internal/datepickerfield.12.js';
38
+ import 'lodash/range';
39
+ import 'moment-range';
40
+ import './esm/_internal/usefocustrap.58.js';
41
+ import 'react-dom';
42
+ import './esm/_internal/clickawayprovider.60.js';
43
+ export { D as Dialog } from './esm/_internal/dialog.13.js';
44
+ import 'lodash/pull';
45
+ import './esm/_internal/usedelayedvisibility.63.js';
46
+ import './esm/_internal/usedisablebodyscroll.61.js';
47
+ export { D as DEFAULT_PROPS, a as Divider } from './esm/_internal/divider.14.js';
48
+ export { D as DragHandle } from './esm/_internal/draghandle.15.js';
49
+ export { L as List, a as ListItem, i as isClickable } from './esm/_internal/list.28.js';
50
+ export { D as Dropdown } from './esm/_internal/dropdown.16.js';
51
+ export { E as ExpansionPanel } from './esm/_internal/expansionpanel.17.js';
52
+ export { F as Flag } from './esm/_internal/flag.18.js';
53
+ import 'lodash/castArray';
54
+ export { F as FlexBox } from './esm/_internal/flexbox.19.js';
55
+ export { G as Grid, a as GridItem } from './esm/_internal/griditem.20.js';
56
+ import 'lodash/isObject';
57
+ export { a as ImageBlock, I as ImageBlockCaptionPosition } from './esm/_internal/imageblock.22.js';
58
+ export { I as InputHelper } from './esm/_internal/inputhelper.23.js';
59
+ export { I as InputLabel } from './esm/_internal/inputlabel.24.js';
60
+ export { L as Lightbox } from './esm/_internal/lightbox.25.js';
61
+ export { L as Link } from './esm/_internal/link.26.js';
62
+ export { L as LinkPreview } from './esm/_internal/linkpreview.27.js';
63
+ export { L as ListDivider, a as ListSubheader } from './esm/_internal/listsubheader.29.js';
64
+ export { M as Message } from './esm/_internal/message.30.js';
65
+ import 'lodash/take';
66
+ export { M as Mosaic } from './esm/_internal/mosaic.31.js';
67
+ export { N as Notification } from './esm/_internal/notification.32.js';
68
+ export { P as PostBlock } from './esm/_internal/postblock.34.js';
69
+ export { a as Progress, P as ProgressVariant } from './esm/_internal/progress.35.js';
70
+ import './esm/_internal/userovingtabindex.66.js';
71
+ export { a as ProgressTracker, P as ProgressTrackerProvider, b as ProgressTrackerStep, c as ProgressTrackerStepPanel } from './esm/_internal/progresstrackersteppanel.36.js';
72
+ export { R as RadioButton, a as RadioGroup } from './esm/_internal/radiogroup.37.js';
73
+ export { a as Select, c as SelectMultiple, b as SelectMultipleField, S as SelectVariant } from './esm/_internal/selectmultiple.38.js';
74
+ export { S as SideNavigation, a as SideNavigationItem } from './esm/_internal/sidenavigationitem.39.js';
75
+ export { S as SkeletonCircle, b as SkeletonRectangle, a as SkeletonRectangleVariant, c as SkeletonTypography } from './esm/_internal/skeletontypography.40.js';
76
+ export { S as Slider, c as clamp } from './esm/_internal/slider.41.js';
77
+ export { S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './esm/_internal/slideshowcontrols.42.js';
78
+ import 'lodash/uniqueId';
79
+ import './hooks/useFocusWithin.js';
80
+ export { S as Switch } from './esm/_internal/switch.43.js';
81
+ export { T as Table, a as TableBody, d as TableCell, c as TableCellVariant, e as TableHeader, f as TableRow, b as ThOrder } from './esm/_internal/tablerow.44.js';
82
+ export { c as Tab, b as TabList, a as TabListLayout, d as TabPanel, T as TabProvider } from './esm/_internal/tabpanel.45.js';
83
+ export { T as TextField } from './esm/_internal/textfield.46.js';
84
+ export { T as Thumbnail } from './esm/_internal/thumbnail.47.js';
85
+ export { T as ThumbnailAspectRatio, a as ThumbnailVariant } from './esm/_internal/types.48.js';
86
+ export { T as Toolbar } from './esm/_internal/toolbar.49.js';
87
+ export { T as Tooltip } from './esm/_internal/tooltip.50.js';
88
+ export { a as Uploader, U as UploaderVariant } from './esm/_internal/uploader.51.js';
89
+ export { U as UserBlock } from './esm/_internal/userblock.52.js';
90
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -7,8 +7,8 @@
7
7
  },
8
8
  "dependencies": {
9
9
  "@juggle/resize-observer": "^3.2.0",
10
- "@lumx/core": "^2.2.6",
11
- "@lumx/icons": "^2.2.6",
10
+ "@lumx/core": "^2.2.9-alpha-exported-hooks1",
11
+ "@lumx/icons": "^2.2.9-alpha-exported-hooks1",
12
12
  "@popperjs/core": "^2.5.4",
13
13
  "body-scroll-lock": "^3.1.5",
14
14
  "classnames": "^2.2.6",
@@ -42,7 +42,6 @@
42
42
  "babel-loader": "^8.0.6",
43
43
  "chromatic": "^6.0.6",
44
44
  "core-js": "^3.6.4",
45
- "dts-bundle-generator": "^5.5.0",
46
45
  "enzyme": "^3.11.0",
47
46
  "enzyme-adapter-react-16": "^1.15.2",
48
47
  "enzyme-to-json": "^3.5.0",
@@ -67,6 +66,7 @@
67
66
  "rollup-plugin-babel": "^4.4.0",
68
67
  "rollup-plugin-cleaner": "^1.0.0",
69
68
  "rollup-plugin-copy": "^3.3.0",
69
+ "rollup-plugin-dts": "^4.1.0",
70
70
  "rollup-plugin-peer-deps-external": "^2.2.4",
71
71
  "rollup-plugin-ts-paths-resolve": "^1.3.0",
72
72
  "rollup-plugin-typescript-paths": "^1.2.2",
@@ -98,9 +98,9 @@
98
98
  "React"
99
99
  ],
100
100
  "license": "MIT",
101
- "module": "esm/index.js",
102
- "main": "esm/index.js",
103
- "types": "types.d.ts",
101
+ "module": "index.js",
102
+ "main": "index.js",
103
+ "types": "index.d.ts",
104
104
  "name": "@lumx/react",
105
105
  "publishConfig": {
106
106
  "directory": "dist"
@@ -110,8 +110,7 @@
110
110
  "url": "git+https://github.com/lumapps/design-system.git"
111
111
  },
112
112
  "scripts": {
113
- "build": "rollup -c && yarn generate:types",
114
- "generate:types": "dts-bundle-generator --no-check --external-types=react --external-imports=moment -o dist/types.d.ts src/index.ts",
113
+ "build": "rollup -c",
115
114
  "prepare": "install-peers || exit 0",
116
115
  "prepublishOnly": "yarn build",
117
116
  "test": "jest --config jest/index.js --coverage --notify --passWithNoTests --detectOpenHandles --runInBand",
@@ -120,6 +119,6 @@
120
119
  "build:storybook": "cd storybook && ./build"
121
120
  },
122
121
  "sideEffects": false,
123
- "version": "2.2.6",
124
- "gitHead": "fc0a2a32102883668d8a1427154ae4d5f2b4cfda"
122
+ "version": "2.2.9-alpha-exported-hooks1",
123
+ "gitHead": "1833b1ecc3e80672a1a6bd5e60f424b1a8685e81"
125
124
  }
@@ -18,6 +18,7 @@ const setup = ({ ...propsOverride }: Partial<AlertDialogProps> = {}, shallowRend
18
18
  const props: AlertDialogProps = {
19
19
  title: 'Alert',
20
20
  description: 'Deserunt et sunt qui consequat sint sit.',
21
+ // eslint-disable-next-line no-alert
21
22
  confirmProps: { onClick: () => alert('confirm'), label: 'OK' },
22
23
  ...propsOverride,
23
24
  };
@@ -1,5 +1,5 @@
1
1
  import { mdiClose } from '@lumx/icons';
2
- import { Autocomplete, AutocompleteProps, Chip, ChipGroup, HorizontalAlignment, Icon, Size } from '@lumx/react';
2
+ import { Autocomplete, AutocompleteProps, Chip, HorizontalAlignment, Icon, Size } from '@lumx/react';
3
3
 
4
4
  import { Comp, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
5
5
 
@@ -68,6 +68,8 @@ export const AutocompleteMultiple: Comp<AutocompleteMultipleProps, HTMLDivElemen
68
68
  const {
69
69
  anchorToInput,
70
70
  children,
71
+ // `chipsAlignment` needs to be here to remove it from `forwardedProps`.
72
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
71
73
  chipsAlignment,
72
74
  className,
73
75
  closeOnClickAway,
@@ -2,7 +2,6 @@
2
2
 
3
3
  exports[`<IconButton> Props should forward any CSS class 1`] = `
4
4
  <Tooltip
5
- delay={500}
6
5
  placement="bottom"
7
6
  >
8
7
  <ButtonRoot
@@ -19,7 +18,6 @@ exports[`<IconButton> Props should forward any CSS class 1`] = `
19
18
 
20
19
  exports[`<IconButton> Props should use default props 1`] = `
21
20
  <Tooltip
22
- delay={500}
23
21
  placement="bottom"
24
22
  >
25
23
  <ButtonRoot
@@ -35,7 +33,6 @@ exports[`<IconButton> Props should use default props 1`] = `
35
33
 
36
34
  exports[`<IconButton> Snapshots and structure should render icon button 1`] = `
37
35
  <Tooltip
38
- delay={500}
39
36
  placement="bottom"
40
37
  >
41
38
  <ButtonRoot
@@ -51,7 +48,6 @@ exports[`<IconButton> Snapshots and structure should render icon button 1`] = `
51
48
 
52
49
  exports[`<IconButton> Snapshots and structure should render icon button with an image 1`] = `
53
50
  <Tooltip
54
- delay={500}
55
51
  placement="bottom"
56
52
  >
57
53
  <ButtonRoot
@@ -70,7 +66,6 @@ exports[`<IconButton> Snapshots and structure should render icon button with an
70
66
 
71
67
  exports[`<IconButton> Snapshots and structure should render icon button with an image if both props are set 1`] = `
72
68
  <Tooltip
73
- delay={500}
74
69
  placement="bottom"
75
70
  >
76
71
  <ButtonRoot
@@ -27,6 +27,8 @@ export interface IconProps extends GenericProps {
27
27
  size?: IconSizes;
28
28
  /** Theme adapting the component to light or dark background. */
29
29
  theme?: Theme;
30
+ /** Sets an alternative text on the svg. Will set an `img` role to the svg. */
31
+ alt?: string;
30
32
  }
31
33
 
32
34
  /**
@@ -52,7 +54,7 @@ const DEFAULT_PROPS: Partial<IconProps> = {};
52
54
  * @return React element.
53
55
  */
54
56
  export const Icon: Comp<IconProps, HTMLElement> = forwardRef((props, ref) => {
55
- const { className, color, colorVariant, hasShape, icon, size, theme, ...forwardedProps } = props;
57
+ const { className, color, colorVariant, hasShape, icon, size, theme, alt, ...forwardedProps } = props;
56
58
 
57
59
  let iconColor;
58
60
  let iconColorVariant;
@@ -110,7 +112,9 @@ export const Icon: Comp<IconProps, HTMLElement> = forwardRef((props, ref) => {
110
112
  )}
111
113
  >
112
114
  <svg
113
- aria-hidden="true"
115
+ aria-hidden={alt ? undefined : 'true'}
116
+ role={alt ? 'img' : undefined}
117
+ aria-label={alt}
114
118
  height="1em"
115
119
  preserveAspectRatio="xMidYMid meet"
116
120
  style={{ verticalAlign: '-0.125em' }}
@@ -2,7 +2,6 @@ import { LANDSCAPE_IMAGES, landscapeImageKnob } from '@lumx/react/stories/knobs/
2
2
  import React from 'react';
3
3
 
4
4
  import { Alignment, AspectRatio, Chip, ChipGroup, ImageBlock, Size } from '@lumx/react';
5
- import { htmlDecode } from '@lumx/react/utils/htmlDecode';
6
5
  import { boolean, select, text } from '@storybook/addon-knobs';
7
6
  import { enumKnob } from '@lumx/react/stories/knobs/enumKnob';
8
7
  import { focusKnob } from '@lumx/react/stories/knobs/focusKnob';
@@ -36,7 +35,7 @@ export const DefaultImageBlock = ({ theme }: any) => {
36
35
  <ImageBlock
37
36
  alt={alt}
38
37
  description={description}
39
- image={htmlDecode(imageUrl)}
38
+ image={imageUrl}
40
39
  size={size}
41
40
  tags={tags}
42
41
  title={title}
@@ -29,6 +29,7 @@ const RowItem: React.FC<RowItemProps> = ({ image }) => {
29
29
  <>
30
30
  <Toolbar
31
31
  label={
32
+ // eslint-disable-next-line jsx-a11y/anchor-is-valid
32
33
  <Link ref={linkRef} typography={Typography.subtitle1} onClick={() => setOpen(true)}>
33
34
  {name}
34
35
  </Link>
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, RefObject, useRef } from 'react';
1
+ import React, { forwardRef, RefObject, useRef, useEffect } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
  import { createPortal } from 'react-dom';
@@ -89,9 +89,11 @@ export const Lightbox: Comp<LightboxProps, HTMLDivElement> = forwardRef((props,
89
89
  // eslint-disable-next-line react-hooks/rules-of-hooks
90
90
  useFocusTrap(wrapperRef.current, childrenRef.current?.firstChild);
91
91
 
92
- const previousOpen = React.useRef(isOpen);
92
+ // eslint-disable-next-line react-hooks/rules-of-hooks
93
+ const previousOpen = useRef(isOpen);
93
94
 
94
- React.useEffect(() => {
95
+ // eslint-disable-next-line react-hooks/rules-of-hooks
96
+ useEffect(() => {
95
97
  if (isOpen !== previousOpen.current) {
96
98
  previousOpen.current = isOpen;
97
99
 
@@ -91,6 +91,7 @@ export const Notification: Comp<NotificationProps, HTMLDivElement> = forwardRef(
91
91
 
92
92
  return type && isVisible
93
93
  ? createPortal(
94
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
94
95
  <div
95
96
  ref={ref}
96
97
  role="alert"
@@ -6,7 +6,6 @@ import { mdiAlertCircle, mdiCheckCircle, mdiClose, mdiCloseCircle, mdiMenuDown }
6
6
 
7
7
  import { Size } from '@lumx/react/components';
8
8
  import { Chip } from '@lumx/react/components/chip/Chip';
9
- import { ChipGroup } from '@lumx/react/components/chip/ChipGroup';
10
9
  import { Icon } from '@lumx/react/components/icon/Icon';
11
10
  import { InputLabel } from '@lumx/react/components/input-label/InputLabel';
12
11
 
@@ -29,7 +29,7 @@ export const Simple = ({ theme }: any) => {
29
29
  {images.map(({ image, alt }, index) => (
30
30
  <SlideshowItem key={`${image}-${index}`}>
31
31
  <ImageBlock
32
- thumbnailProps={{ aspectRatio: AspectRatio.horizontal }}
32
+ thumbnailProps={{ aspectRatio: AspectRatio.horizontal, loading: 'eager' }}
33
33
  image={image}
34
34
  alt={alt}
35
35
  theme={theme}
@@ -1,11 +1,10 @@
1
- import React, { CSSProperties, forwardRef, useCallback, useEffect, useState } from 'react';
1
+ import React, { CSSProperties, forwardRef } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
5
5
  import { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';
6
-
7
- import { AUTOPLAY_DEFAULT_INTERVAL, FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
8
- import { useInterval } from '@lumx/react/hooks/useInterval';
6
+ import { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';
7
+ import { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
9
8
  import { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
10
9
  import { mergeRefs } from '@lumx/react/utils/mergeRefs';
11
10
 
@@ -39,6 +38,10 @@ export interface SlideshowProps extends GenericProps {
39
38
  theme?: Theme;
40
39
  /** Callback when slide changes */
41
40
  onChange?(index: number): void;
41
+ /** slideshow HTML id attribute */
42
+ id?: string;
43
+ /** slides wrapper HTML id attribute */
44
+ slidesId?: string;
42
45
  }
43
46
 
44
47
  /**
@@ -55,9 +58,7 @@ const CLASSNAME = getRootClassName(COMPONENT_NAME);
55
58
  * Component default props.
56
59
  */
57
60
  const DEFAULT_PROPS: Partial<SlideshowProps> = {
58
- activeIndex: 0,
59
- groupBy: 1,
60
- interval: AUTOPLAY_DEFAULT_INTERVAL,
61
+ ...DEFAULT_OPTIONS,
61
62
  theme: Theme.light,
62
63
  };
63
64
 
@@ -80,122 +81,76 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
80
81
  onChange,
81
82
  slideshowControlsProps,
82
83
  theme,
84
+ id,
85
+ slidesId,
83
86
  ...forwardedProps
84
87
  } = props;
85
- const [currentIndex, setCurrentIndex] = useState(activeIndex as number);
86
- // Use state instead of a ref to make the slideshow controls update directly when the element is set.
87
- const [element, setElement] = useState<HTMLDivElement>();
88
-
89
88
  // Number of slideshow items.
90
89
  const itemsCount = React.Children.count(children);
91
- // Number of slides when using groupBy prop.
92
- const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));
93
- // Inline style of wrapper element.
94
- const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };
95
-
96
- // Change current index to display next slide.
97
- const goToNextSlide = useCallback(
98
- (loopback = true) => {
99
- setCurrentIndex((index) => {
100
- if (loopback && index === slidesCount - 1) {
101
- // Loopback to the start.
102
- return 0;
103
- }
104
- if (index < slidesCount - 1) {
105
- // Next slide.
106
- return index + 1;
107
- }
108
- return index;
109
- });
110
- },
111
- [slidesCount, setCurrentIndex],
112
- );
113
-
114
- // Change current index to display previous slide.
115
- const goToPreviousSlide = useCallback(
116
- (loopback = true) => {
117
- setCurrentIndex((index) => {
118
- if (loopback && index === 0) {
119
- // Loopback to the end.
120
- return slidesCount - 1;
121
- }
122
- if (index > 0) {
123
- // Previous slide.
124
- return index - 1;
125
- }
126
- return index;
127
- });
128
- },
129
- [slidesCount, setCurrentIndex],
130
- );
131
-
132
- // Auto play
133
- const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));
134
- // Start
135
- useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? (interval as number) : null);
136
-
137
- // Reset current index if it become invalid.
138
- useEffect(() => {
139
- if (currentIndex > slidesCount - 1) {
140
- setCurrentIndex(DEFAULT_PROPS.activeIndex as number);
141
- }
142
- }, [currentIndex, slidesCount]);
143
-
144
- // Handle click on a bullet to go to a specific slide.
145
- const handleControlGotToSlide = useCallback(
146
- (index: number) => {
147
- setIsAutoPlaying(false);
148
-
149
- if (index >= 0 && index < slidesCount) {
150
- setCurrentIndex(index);
151
- }
152
- },
153
- [slidesCount, setCurrentIndex],
154
- );
155
90
 
156
- // Handle click or keyboard event to go to next slide.
157
- const handleControlNextSlide = useCallback(
158
- (loopback = true) => {
159
- setIsAutoPlaying(false);
160
- goToNextSlide(loopback);
161
- },
162
- [goToNextSlide],
163
- );
164
-
165
- // Handle click or keyboard event to go to previous slide.
166
- const handleControlPreviousSlide = useCallback(
167
- (loopback = true) => {
168
- setIsAutoPlaying(false);
169
- goToPreviousSlide(loopback);
170
- },
171
- [goToPreviousSlide],
172
- );
173
-
174
- // If the activeIndex props changes, update the current slide
175
- useEffect(() => {
176
- setCurrentIndex(activeIndex as number);
177
- }, [activeIndex]);
91
+ const {
92
+ activeIndex: currentIndex,
93
+ slideshowId,
94
+ setSlideshow,
95
+ isAutoPlaying,
96
+ slideshowSlidesId,
97
+ setIsAutoPlaying,
98
+ startIndexVisible,
99
+ endIndexVisible,
100
+ slidesCount,
101
+ onNextClick,
102
+ onPaginationClick,
103
+ onPreviousClick,
104
+ slideshow,
105
+ } = SlideshowControls.useSlideshowControls({
106
+ activeIndex,
107
+ defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,
108
+ autoPlay: Boolean(autoPlay),
109
+ itemsCount,
110
+ groupBy,
111
+ id,
112
+ interval,
113
+ onChange,
114
+ slidesId,
115
+ });
178
116
 
179
- // If the slide changes, with autoplay for example, trigger "onChange"
180
- useEffect(() => {
181
- if (!onChange) return;
182
- onChange(currentIndex);
183
- }, [currentIndex, onChange]);
117
+ // Inline style of wrapper element.
118
+ const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };
184
119
 
185
120
  /* eslint-disable jsx-a11y/no-noninteractive-tabindex */
186
121
  return (
187
- <div
188
- ref={mergeRefs(ref, setElement)}
122
+ <section
123
+ id={slideshowId}
124
+ ref={mergeRefs(ref, setSlideshow)}
189
125
  {...forwardedProps}
190
126
  className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {
191
127
  [`${CLASSNAME}--fill-height`]: fillHeight,
192
128
  [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),
193
129
  })}
194
- tabIndex={0}
130
+ aria-roledescription="carousel"
131
+ aria-live={isAutoPlaying ? 'off' : 'polite'}
195
132
  >
196
- <div className={`${CLASSNAME}__slides`}>
133
+ <div
134
+ id={slideshowSlidesId}
135
+ className={`${CLASSNAME}__slides`}
136
+ onMouseEnter={() => setIsAutoPlaying(false)}
137
+ onMouseLeave={() => setIsAutoPlaying(Boolean(autoPlay))}
138
+ >
197
139
  <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
198
- {children}
140
+ {React.Children.map(children, (child: React.ReactNode, index: number) => {
141
+ if (React.isValidElement(child)) {
142
+ const isCurrentlyVisible = index >= startIndexVisible && index <= endIndexVisible;
143
+
144
+ return React.cloneElement(child, {
145
+ style: !isCurrentlyVisible
146
+ ? { visibility: 'hidden', ...(child.props.style || {}) }
147
+ : child.props.style || {},
148
+ 'aria-hidden': !isCurrentlyVisible,
149
+ });
150
+ }
151
+
152
+ return null;
153
+ })}
199
154
  </div>
200
155
  </div>
201
156
 
@@ -204,18 +159,27 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
204
159
  <SlideshowControls
205
160
  {...slideshowControlsProps}
206
161
  activeIndex={currentIndex}
207
- onPaginationClick={handleControlGotToSlide}
208
- onNextClick={handleControlNextSlide}
209
- onPreviousClick={handleControlPreviousSlide}
162
+ onPaginationClick={onPaginationClick}
163
+ onNextClick={onNextClick}
164
+ onPreviousClick={onPreviousClick}
210
165
  slidesCount={slidesCount}
211
- parentRef={element}
166
+ parentRef={slideshow}
212
167
  theme={theme}
168
+ nextButtonProps={{
169
+ 'aria-controls': slideshowSlidesId,
170
+ ...slideshowControlsProps.nextButtonProps,
171
+ }}
172
+ previousButtonProps={{
173
+ 'aria-controls': slideshowSlidesId,
174
+ ...slideshowControlsProps.previousButtonProps,
175
+ }}
213
176
  />
214
177
  </div>
215
178
  )}
216
- </div>
179
+ </section>
217
180
  );
218
181
  });
182
+
219
183
  Slideshow.displayName = COMPONENT_NAME;
220
184
  Slideshow.className = CLASSNAME;
221
185
  Slideshow.defaultProps = DEFAULT_PROPS;
@@ -6,13 +6,15 @@ import { thumbnailsKnob } from '@lumx/react/stories/knobs/thumbnailsKnob';
6
6
  export default { title: 'LumX components/slideshow/Slideshow controls' };
7
7
 
8
8
  export const Simple = () => {
9
- const slidesCount = 9;
10
- const [activeIndex, setActiveIndex] = React.useState(0);
11
- const maxIndex = slidesCount - 1;
12
-
13
- const onNextClick = () => setActiveIndex(activeIndex === maxIndex ? 0 : activeIndex + 1);
14
- const onPreviousClick = () => setActiveIndex(activeIndex === 0 ? maxIndex : activeIndex - 1);
15
- const onPaginationClick = (index: number) => setActiveIndex(index);
9
+ const {
10
+ activeIndex,
11
+ slidesCount,
12
+ onNextClick,
13
+ onPreviousClick,
14
+ onPaginationClick,
15
+ } = SlideshowControls.useSlideshowControls({
16
+ itemsCount: 9,
17
+ });
16
18
 
17
19
  return (
18
20
  <SlideshowControls
@@ -29,15 +31,19 @@ export const Simple = () => {
29
31
 
30
32
  export const ControllingSlideshow = ({ theme }: any) => {
31
33
  const items = thumbnailsKnob(6);
32
- const [activeIndex, setActiveIndex] = React.useState(0);
33
- const maxIndex = items.length - 1;
34
34
  const slideshowStyle = {
35
35
  width: '50%',
36
36
  };
37
37
 
38
- const onNextClick = () => setActiveIndex(activeIndex === maxIndex ? 0 : activeIndex + 1);
39
- const onPreviousClick = () => setActiveIndex(activeIndex === 0 ? maxIndex : activeIndex - 1);
40
- const onPaginationClick = (index: number) => setActiveIndex(index);
38
+ const {
39
+ activeIndex,
40
+ setActiveIndex,
41
+ onNextClick,
42
+ onPreviousClick,
43
+ onPaginationClick,
44
+ } = SlideshowControls.useSlideshowControls({
45
+ itemsCount: 6,
46
+ });
41
47
 
42
48
  return (
43
49
  <div style={{ height: 400, width: 500, position: 'relative' }}>