@lumx/react 3.10.1-alpha.2 → 3.10.1-alpha.4

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 (334) hide show
  1. package/_internal/{8d67e1e3.d.ts → index.d.ts} +1 -1
  2. package/_internal/index.js +99 -0
  3. package/_internal/index.js.map +1 -0
  4. package/index.d.ts +3000 -66
  5. package/index.js +14561 -64
  6. package/index.js.map +1 -1
  7. package/package.json +3 -3
  8. package/src/components/button/Button.tsx +4 -5
  9. package/src/components/button/ButtonRoot.tsx +1 -3
  10. package/src/components/chip/Chip.tsx +7 -11
  11. package/src/components/date-picker/DatePickerControlled.tsx +1 -1
  12. package/src/components/dialog/Dialog.tsx +1 -1
  13. package/src/components/expansion-panel/ExpansionPanel.test.tsx +2 -2
  14. package/src/components/expansion-panel/ExpansionPanel.tsx +14 -18
  15. package/src/components/flex-box/FlexBox.tsx +1 -1
  16. package/src/components/generic-block/GenericBlock.tsx +6 -7
  17. package/src/components/generic-block/constants.ts +9 -4
  18. package/src/components/grid-column/GridColumn.tsx +1 -2
  19. package/src/components/image-lightbox/internal/ImageSlide.tsx +2 -2
  20. package/src/components/image-lightbox/internal/ImageSlideshow.tsx +4 -8
  21. package/src/components/image-lightbox/useImageLightbox.tsx +3 -4
  22. package/src/components/link/Link.tsx +3 -5
  23. package/src/components/list/ListItem.tsx +2 -3
  24. package/src/components/list/useInteractiveList.tsx +1 -2
  25. package/src/components/mosaic/Mosaic.test.tsx +3 -3
  26. package/src/components/mosaic/Mosaic.tsx +2 -3
  27. package/src/components/navigation/Navigation.tsx +42 -37
  28. package/src/components/navigation/NavigationSection.tsx +76 -79
  29. package/src/components/notification/Notification.tsx +1 -5
  30. package/src/components/popover/usePopoverStyle.tsx +3 -1
  31. package/src/components/popover/useRestoreFocusOnClose.tsx +1 -1
  32. package/src/components/popover-dialog/PopoverDialog.test.tsx +1 -1
  33. package/src/components/post-block/PostBlock.tsx +4 -8
  34. package/src/components/progress-tracker/ProgressTracker.stories.tsx +11 -11
  35. package/src/components/select/Select.stories.tsx +14 -5
  36. package/src/components/select/Select.test.tsx +2 -2
  37. package/src/components/select/Select.tsx +1 -2
  38. package/src/components/select/SelectMultiple.stories.tsx +12 -10
  39. package/src/components/side-navigation/SideNavigationItem.tsx +1 -1
  40. package/src/components/slideshow/Slides.tsx +1 -1
  41. package/src/components/slideshow/SlideshowControls.tsx +1 -1
  42. package/src/components/slideshow/useSlideFocusManagement.tsx +1 -1
  43. package/src/components/switch/Switch.tsx +1 -2
  44. package/src/components/tabs/Tabs.stories.tsx +3 -4
  45. package/src/components/text-field/TextField.test.tsx +4 -4
  46. package/src/components/text-field/TextField.tsx +2 -3
  47. package/src/components/tooltip/Tooltip.test.tsx +2 -2
  48. package/src/components/tooltip/useTooltipOpen.tsx +3 -3
  49. package/src/components/user-block/UserBlock.tsx +7 -9
  50. package/src/hooks/useCallbackOnEscape.ts +1 -1
  51. package/src/hooks/useClickAway.tsx +1 -2
  52. package/src/hooks/useFocusTrap.ts +1 -1
  53. package/src/hooks/useInterval.tsx +1 -4
  54. package/src/hooks/useKeyboardListNavigation.tsx +2 -4
  55. package/src/hooks/useSizeOnWindowResize.ts +14 -10
  56. package/src/hooks/useStopPropagation.ts +1 -2
  57. package/src/hooks/useTransitionVisibility.ts +2 -2
  58. package/src/stories/decorators/withCombinations.tsx +1 -1
  59. package/src/testing/utils/commonTestsSuiteRTL.tsx +2 -2
  60. package/src/utils/{DOM → browser/DOM}/startViewTransition.ts +3 -3
  61. package/src/utils/{focus → browser/focus}/getFirstAndLastFocusable.test.ts +1 -1
  62. package/src/utils/{focus → browser/focus}/getFocusableElements.test.ts +1 -1
  63. package/src/utils/{browserDoesNotSupportHover.test.js → browser/isHoverNotSupported.test.js} +5 -5
  64. package/src/utils/browser/isHoverNotSupported.ts +2 -0
  65. package/src/utils/browser/{getPrefersReducedMotion.ts → isReducedMotion.ts} +1 -1
  66. package/src/utils/className/getFontColorClassName.ts +9 -0
  67. package/src/utils/{className.ts → className/getRootClassName.ts} +1 -21
  68. package/src/utils/className/getTypographyClassName.ts +9 -0
  69. package/src/utils/className/index.ts +4 -0
  70. package/src/utils/collection/castArray.test.ts +15 -0
  71. package/src/utils/collection/castArray.ts +3 -0
  72. package/src/utils/collection/chunk.test.ts +15 -0
  73. package/src/utils/collection/chunk.ts +6 -0
  74. package/src/utils/collection/isEmpty.test.js +20 -0
  75. package/src/utils/collection/isEmpty.ts +4 -0
  76. package/src/utils/collection/last.ts +2 -0
  77. package/src/utils/collection/partitionMulti.test.ts +35 -0
  78. package/src/utils/{partitionMulti.ts → collection/partitionMulti.ts} +13 -12
  79. package/src/utils/collection/pull.test.ts +17 -0
  80. package/src/utils/collection/pull.ts +7 -0
  81. package/src/utils/collection/range.test.js +9 -0
  82. package/src/utils/collection/range.ts +2 -0
  83. package/src/utils/date/getMonthCalendar.ts +3 -4
  84. package/src/utils/flattenChildren.ts +2 -3
  85. package/src/utils/function/memoize.test.ts +36 -0
  86. package/src/utils/function/memoize.ts +13 -0
  87. package/src/utils/makeListenerTowerContext.ts +2 -2
  88. package/src/utils/partitionMulti.test.ts +27 -0
  89. package/src/utils/react/forwardRef.ts +3 -2
  90. package/src/utils/react/forwardRefPolymorphic.ts +1 -2
  91. package/utils/index.d.ts +1 -1
  92. package/utils/index.js +1 -96
  93. package/utils/index.js.map +1 -1
  94. package/_internal/17c3ea1d.js +0 -137
  95. package/_internal/17c3ea1d.js.map +0 -1
  96. package/_internal/1da25128.js +0 -411
  97. package/_internal/1da25128.js.map +0 -1
  98. package/_internal/230173a8.js +0 -13
  99. package/_internal/230173a8.js.map +0 -1
  100. package/_internal/23bdba2d.js +0 -71
  101. package/_internal/23bdba2d.js.map +0 -1
  102. package/_internal/26926e5c.d.ts +0 -36
  103. package/_internal/2a3d237c.js +0 -12
  104. package/_internal/2a3d237c.js.map +0 -1
  105. package/_internal/2c5dbb03.js +0 -26
  106. package/_internal/2c5dbb03.js.map +0 -1
  107. package/_internal/2e2abe51.js +0 -2154
  108. package/_internal/2e2abe51.js.map +0 -1
  109. package/_internal/31490c59.d.ts +0 -167
  110. package/_internal/3181f000.js +0 -14
  111. package/_internal/3181f000.js.map +0 -1
  112. package/_internal/35f100be.d.ts +0 -104
  113. package/_internal/36bd7352.js +0 -219
  114. package/_internal/36bd7352.js.map +0 -1
  115. package/_internal/3a1facc0.js +0 -18
  116. package/_internal/3a1facc0.js.map +0 -1
  117. package/_internal/4c20d932.js +0 -89
  118. package/_internal/4c20d932.js.map +0 -1
  119. package/_internal/4c28d012.js +0 -305
  120. package/_internal/4c28d012.js.map +0 -1
  121. package/_internal/4cd0bf32.js +0 -160
  122. package/_internal/4cd0bf32.js.map +0 -1
  123. package/_internal/4daccdd5.js +0 -25
  124. package/_internal/4daccdd5.js.map +0 -1
  125. package/_internal/524b1d04.js +0 -64
  126. package/_internal/524b1d04.js.map +0 -1
  127. package/_internal/53c94227.js +0 -123
  128. package/_internal/53c94227.js.map +0 -1
  129. package/_internal/54d9ded5.js +0 -418
  130. package/_internal/54d9ded5.js.map +0 -1
  131. package/_internal/56aec41b.js +0 -652
  132. package/_internal/56aec41b.js.map +0 -1
  133. package/_internal/5720caf5.js +0 -124
  134. package/_internal/5720caf5.js.map +0 -1
  135. package/_internal/646f0db6.js +0 -113
  136. package/_internal/646f0db6.js.map +0 -1
  137. package/_internal/6cc8dca8.d.ts +0 -22
  138. package/_internal/7f022f8c.d.ts +0 -34
  139. package/_internal/b8f2948d.js +0 -691
  140. package/_internal/b8f2948d.js.map +0 -1
  141. package/_internal/bc28d510.js +0 -784
  142. package/_internal/bc28d510.js.map +0 -1
  143. package/_internal/c68d24e4.js +0 -145
  144. package/_internal/c68d24e4.js.map +0 -1
  145. package/_internal/c6c99f76.js +0 -105
  146. package/_internal/c6c99f76.js.map +0 -1
  147. package/_internal/cae46566.js +0 -65
  148. package/_internal/cae46566.js.map +0 -1
  149. package/_internal/components/alert-dialog/index.ts-623b1ed3.d.ts +0 -37
  150. package/_internal/components/alert-dialog/index.ts-f83bd6ef.js +0 -148
  151. package/_internal/components/alert-dialog/index.ts-f83bd6ef.js.map +0 -1
  152. package/_internal/components/autocomplete/index.ts-3f8f125c.js +0 -264
  153. package/_internal/components/autocomplete/index.ts-3f8f125c.js.map +0 -1
  154. package/_internal/components/autocomplete/index.ts-8d6b123f.d.ts +0 -201
  155. package/_internal/components/avatar/index.ts-93ee0ea9.js +0 -89
  156. package/_internal/components/avatar/index.ts-93ee0ea9.js.map +0 -1
  157. package/_internal/components/avatar/index.ts-f92852b4.d.ts +0 -43
  158. package/_internal/components/badge/index.ts-2d7700ef.d.ts +0 -30
  159. package/_internal/components/badge/index.ts-6753d67f.js +0 -88
  160. package/_internal/components/badge/index.ts-6753d67f.js.map +0 -1
  161. package/_internal/components/button/index.ts-031307ce.js +0 -51
  162. package/_internal/components/button/index.ts-031307ce.js.map +0 -1
  163. package/_internal/components/button/index.ts-b29e26a4.d.ts +0 -22
  164. package/_internal/components/checkbox/index.ts-a33166d7.js +0 -127
  165. package/_internal/components/checkbox/index.ts-a33166d7.js.map +0 -1
  166. package/_internal/components/checkbox/index.ts-f82358ff.d.ts +0 -38
  167. package/_internal/components/chip/index.ts-4a91f1a7.d.ts +0 -68
  168. package/_internal/components/chip/index.ts-a2b5b771.js +0 -110
  169. package/_internal/components/chip/index.ts-a2b5b771.js.map +0 -1
  170. package/_internal/components/comment-block/index.ts-58fa051a.js +0 -121
  171. package/_internal/components/comment-block/index.ts-58fa051a.js.map +0 -1
  172. package/_internal/components/comment-block/index.ts-8cfa5af0.d.ts +0 -67
  173. package/_internal/components/date-picker/index.ts-145262d5.js +0 -2
  174. package/_internal/components/date-picker/index.ts-145262d5.js.map +0 -1
  175. package/_internal/components/date-picker/index.ts-70a34fa7.d.ts +0 -95
  176. package/_internal/components/dialog/index.ts-ea044db2.js +0 -224
  177. package/_internal/components/dialog/index.ts-ea044db2.js.map +0 -1
  178. package/_internal/components/dialog/index.ts-eca28654.d.ts +0 -55
  179. package/_internal/components/divider/index.ts-4a56db75.js +0 -55
  180. package/_internal/components/divider/index.ts-4a56db75.js.map +0 -1
  181. package/_internal/components/divider/index.ts-b011d8ca.d.ts +0 -18
  182. package/_internal/components/drag-handle/index.ts-0aebf92f.js +0 -54
  183. package/_internal/components/drag-handle/index.ts-0aebf92f.js.map +0 -1
  184. package/_internal/components/drag-handle/index.ts-3ab31dd1.d.ts +0 -18
  185. package/_internal/components/dropdown/index.ts-2a17db51.js +0 -154
  186. package/_internal/components/dropdown/index.ts-2a17db51.js.map +0 -1
  187. package/_internal/components/dropdown/index.ts-b648a15c.d.ts +0 -87
  188. package/_internal/components/expansion-panel/index.ts-69f09f5b.d.ts +0 -38
  189. package/_internal/components/expansion-panel/index.ts-fae3762e.js +0 -143
  190. package/_internal/components/expansion-panel/index.ts-fae3762e.js.map +0 -1
  191. package/_internal/components/flag/index.ts-8dcd685b.js +0 -56
  192. package/_internal/components/flag/index.ts-8dcd685b.js.map +0 -1
  193. package/_internal/components/flag/index.ts-fda89adb.d.ts +0 -23
  194. package/_internal/components/flex-box/index.ts-87f2b58d.d.ts +0 -43
  195. package/_internal/components/flex-box/index.ts-c216e957.js +0 -60
  196. package/_internal/components/flex-box/index.ts-c216e957.js.map +0 -1
  197. package/_internal/components/generic-block/index.ts-999a62a4.js +0 -115
  198. package/_internal/components/generic-block/index.ts-999a62a4.js.map +0 -1
  199. package/_internal/components/generic-block/index.ts-cd3b0e21.d.ts +0 -106
  200. package/_internal/components/grid/index.ts-67e0694f.d.ts +0 -50
  201. package/_internal/components/grid/index.ts-fdf1b306.js +0 -113
  202. package/_internal/components/grid/index.ts-fdf1b306.js.map +0 -1
  203. package/_internal/components/grid-column/index.ts-97c61cbe.js +0 -64
  204. package/_internal/components/grid-column/index.ts-97c61cbe.js.map +0 -1
  205. package/_internal/components/grid-column/index.ts-c89e1c18.d.ts +0 -31
  206. package/_internal/components/heading/index.ts-0179e9a9.js +0 -112
  207. package/_internal/components/heading/index.ts-0179e9a9.js.map +0 -1
  208. package/_internal/components/heading/index.ts-587579e8.d.ts +0 -37
  209. package/_internal/components/icon/index.ts-740ca1de.js +0 -2
  210. package/_internal/components/icon/index.ts-740ca1de.js.map +0 -1
  211. package/_internal/components/icon/index.ts-b3fa5e15.d.ts +0 -34
  212. package/_internal/components/image-block/index.ts-36b3828f.d.ts +0 -49
  213. package/_internal/components/image-block/index.ts-ef5e2e7d.js +0 -111
  214. package/_internal/components/image-block/index.ts-ef5e2e7d.js.map +0 -1
  215. package/_internal/components/image-lightbox/index.ts-137f85a8.js +0 -765
  216. package/_internal/components/image-lightbox/index.ts-137f85a8.js.map +0 -1
  217. package/_internal/components/image-lightbox/index.ts-2cb92d18.d.ts +0 -75
  218. package/_internal/components/inline-list/index.ts-033dd358.js +0 -76
  219. package/_internal/components/inline-list/index.ts-033dd358.js.map +0 -1
  220. package/_internal/components/inline-list/index.ts-e1c8a3ff.d.ts +0 -34
  221. package/_internal/components/input-helper/index.ts-32a9ca90.d.ts +0 -22
  222. package/_internal/components/input-helper/index.ts-ab3a1ef5.js +0 -75
  223. package/_internal/components/input-helper/index.ts-ab3a1ef5.js.map +0 -1
  224. package/_internal/components/input-label/index.ts-86f2ea41.d.ts +0 -24
  225. package/_internal/components/input-label/index.ts-d6ca5569.js +0 -60
  226. package/_internal/components/input-label/index.ts-d6ca5569.js.map +0 -1
  227. package/_internal/components/lightbox/index.ts-5370e8e6.d.ts +0 -36
  228. package/_internal/components/lightbox/index.ts-7a16cdc7.js +0 -149
  229. package/_internal/components/lightbox/index.ts-7a16cdc7.js.map +0 -1
  230. package/_internal/components/link/index.ts-26435006.d.ts +0 -37
  231. package/_internal/components/link/index.ts-d04f4e53.js +0 -120
  232. package/_internal/components/link/index.ts-d04f4e53.js.map +0 -1
  233. package/_internal/components/link-preview/index.ts-e560a274.d.ts +0 -36
  234. package/_internal/components/link-preview/index.ts-fee89f66.js +0 -109
  235. package/_internal/components/link-preview/index.ts-fee89f66.js.map +0 -1
  236. package/_internal/components/list/index.ts-ab57902e.d.ts +0 -118
  237. package/_internal/components/list/index.ts-f3101625.js +0 -86
  238. package/_internal/components/list/index.ts-f3101625.js.map +0 -1
  239. package/_internal/components/message/index.ts-041cf0cb.js +0 -97
  240. package/_internal/components/message/index.ts-041cf0cb.js.map +0 -1
  241. package/_internal/components/message/index.ts-2d38e0ea.d.ts +0 -37
  242. package/_internal/components/mosaic/index.ts-232d5aed.d.ts +0 -23
  243. package/_internal/components/mosaic/index.ts-d2128cd3.js +0 -94
  244. package/_internal/components/mosaic/index.ts-d2128cd3.js.map +0 -1
  245. package/_internal/components/navigation/index.ts-6d8bea53.d.ts +0 -58
  246. package/_internal/components/navigation/index.ts-e8dc0a7f.js +0 -222
  247. package/_internal/components/navigation/index.ts-e8dc0a7f.js.map +0 -1
  248. package/_internal/components/notification/index.ts-235fd340.js +0 -140
  249. package/_internal/components/notification/index.ts-235fd340.js.map +0 -1
  250. package/_internal/components/notification/index.ts-bb3f03f6.d.ts +0 -34
  251. package/_internal/components/popover/index.ts-2f17a9b6.js +0 -3
  252. package/_internal/components/popover/index.ts-2f17a9b6.js.map +0 -1
  253. package/_internal/components/popover/index.ts-e3b4ff19.d.ts +0 -66
  254. package/_internal/components/post-block/index.ts-0acb9bb4.js +0 -101
  255. package/_internal/components/post-block/index.ts-0acb9bb4.js.map +0 -1
  256. package/_internal/components/post-block/index.ts-9b8ff90b.d.ts +0 -41
  257. package/_internal/components/progress/index.ts-2a713859.js +0 -189
  258. package/_internal/components/progress/index.ts-2a713859.js.map +0 -1
  259. package/_internal/components/progress/index.ts-dfdfa5fb.d.ts +0 -60
  260. package/_internal/components/progress-tracker/index.ts-2649f756.js +0 -312
  261. package/_internal/components/progress-tracker/index.ts-2649f756.js.map +0 -1
  262. package/_internal/components/progress-tracker/index.ts-95320f32.d.ts +0 -101
  263. package/_internal/components/radio-button/index.ts-5eaab4cf.d.ts +0 -54
  264. package/_internal/components/radio-button/index.ts-b4dfb2a0.js +0 -150
  265. package/_internal/components/radio-button/index.ts-b4dfb2a0.js.map +0 -1
  266. package/_internal/components/select/index.ts-a65e3507.d.ts +0 -91
  267. package/_internal/components/select/index.ts-e8fad28b.js +0 -257
  268. package/_internal/components/select/index.ts-e8fad28b.js.map +0 -1
  269. package/_internal/components/side-navigation/index.ts-3f5f3785.d.ts +0 -60
  270. package/_internal/components/side-navigation/index.ts-c9a5fc3e.js +0 -184
  271. package/_internal/components/side-navigation/index.ts-c9a5fc3e.js.map +0 -1
  272. package/_internal/components/skeleton/index.ts-a7daefac.d.ts +0 -75
  273. package/_internal/components/skeleton/index.ts-ffc995af.js +0 -179
  274. package/_internal/components/skeleton/index.ts-ffc995af.js.map +0 -1
  275. package/_internal/components/slider/index.ts-24a0d598.d.ts +0 -52
  276. package/_internal/components/slider/index.ts-72aadf4c.js +0 -308
  277. package/_internal/components/slider/index.ts-72aadf4c.js.map +0 -1
  278. package/_internal/components/slideshow/index.ts-c99f2892.js +0 -151
  279. package/_internal/components/slideshow/index.ts-c99f2892.js.map +0 -1
  280. package/_internal/components/slideshow/index.ts-e49462c6.d.ts +0 -25
  281. package/_internal/components/switch/index.ts-207ba52b.d.ts +0 -34
  282. package/_internal/components/switch/index.ts-542e6eaf.js +0 -115
  283. package/_internal/components/switch/index.ts-542e6eaf.js.map +0 -1
  284. package/_internal/components/table/index.ts-905ce390.js +0 -310
  285. package/_internal/components/table/index.ts-905ce390.js.map +0 -1
  286. package/_internal/components/table/index.ts-c4f39b2d.d.ts +0 -108
  287. package/_internal/components/tabs/index.ts-713119f4.js +0 -289
  288. package/_internal/components/tabs/index.ts-713119f4.js.map +0 -1
  289. package/_internal/components/tabs/index.ts-dbfc48d9.d.ts +0 -106
  290. package/_internal/components/text/index.ts-6afbe8cd.js +0 -2
  291. package/_internal/components/text/index.ts-6afbe8cd.js.map +0 -1
  292. package/_internal/components/text/index.ts-8a812048.d.ts +0 -53
  293. package/_internal/components/text-field/index.ts-92e6b3b3.d.ts +0 -77
  294. package/_internal/components/text-field/index.ts-c3be8563.js +0 -341
  295. package/_internal/components/text-field/index.ts-c3be8563.js.map +0 -1
  296. package/_internal/components/thumbnail/index.ts-16d7b403.js +0 -40
  297. package/_internal/components/thumbnail/index.ts-16d7b403.js.map +0 -1
  298. package/_internal/components/thumbnail/index.ts-1b6c0b48.d.ts +0 -8
  299. package/_internal/components/toolbar/index.ts-813b902e.js +0 -63
  300. package/_internal/components/toolbar/index.ts-813b902e.js.map +0 -1
  301. package/_internal/components/toolbar/index.ts-9f5129d1.d.ts +0 -24
  302. package/_internal/components/tooltip/index.ts-905c847c.js +0 -322
  303. package/_internal/components/tooltip/index.ts-905c847c.js.map +0 -1
  304. package/_internal/components/tooltip/index.ts-c6931e9e.d.ts +0 -35
  305. package/_internal/components/uploader/index.ts-31f21c2a.js +0 -132
  306. package/_internal/components/uploader/index.ts-31f21c2a.js.map +0 -1
  307. package/_internal/components/uploader/index.ts-c3ccba98.d.ts +0 -51
  308. package/_internal/components/user-block/index.ts-18c58e19.d.ts +0 -50
  309. package/_internal/components/user-block/index.ts-d43e5f3c.js +0 -136
  310. package/_internal/components/user-block/index.ts-d43e5f3c.js.map +0 -1
  311. package/_internal/dc3e28c8.d.ts +0 -38
  312. package/_internal/f39a1ba4.js +0 -73
  313. package/_internal/f39a1ba4.js.map +0 -1
  314. package/_internal/f3e77e3e.js +0 -22
  315. package/_internal/f3e77e3e.js.map +0 -1
  316. package/_internal/f502ab30.js +0 -78
  317. package/_internal/f502ab30.js.map +0 -1
  318. package/_internal/f52adbae.js +0 -36
  319. package/_internal/f52adbae.js.map +0 -1
  320. package/_internal/f57e1239.js +0 -205
  321. package/_internal/f57e1239.js.map +0 -1
  322. package/_internal/f5ff1aa4.d.ts +0 -47
  323. package/_internal/fb975afe.js +0 -52
  324. package/_internal/fb975afe.js.map +0 -1
  325. package/src/utils/browserDoesNotSupportHover.ts +0 -2
  326. package/src/utils/isInternetExplorer.ts +0 -15
  327. package/src/utils/userHasReducedMotion.ts +0 -7
  328. package/src/utils/utils.test.ts +0 -48
  329. /package/src/utils/{DOM → browser/DOM}/findImage.tsx +0 -0
  330. /package/src/utils/{event.ts → browser/event.ts} +0 -0
  331. /package/src/utils/{focus → browser/focus}/constants.ts +0 -0
  332. /package/src/utils/{focus → browser/focus}/getFirstAndLastFocusable.ts +0 -0
  333. /package/src/utils/{focus → browser/focus}/getFocusableElements.ts +0 -0
  334. /package/src/utils/{isFocusVisible.ts → browser/isFocusVisible.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, ReactNode, useRef, useState, useContext } from 'react';
1
+ import React, { useRef, useState, useContext } from 'react';
2
2
 
3
3
  import { mdiChevronDown, mdiChevronUp } from '@lumx/icons';
4
4
  import { Icon, Size, Text, Orientation, Popover, Placement, Theme } from '@lumx/react';
@@ -7,17 +7,18 @@ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/classNam
7
7
  import { HasClassName } from '@lumx/react/utils/type';
8
8
  import { ThemeProvider, useTheme } from '@lumx/react/utils/theme/ThemeContext';
9
9
  import { useId } from '@lumx/react/hooks/useId';
10
+ import { forwardRef } from '@lumx/react/utils/react/forwardRef';
10
11
 
11
12
  import { CLASSNAME as ITEM_CLASSNAME } from './NavigationItem';
12
13
  import { NavigationContext } from './context';
13
14
 
14
15
  export interface NavigationSectionProps extends React.ComponentPropsWithoutRef<'button'>, HasClassName {
15
16
  /** Items inside the section */
16
- children: ReactNode;
17
+ children: React.ReactNode;
17
18
  /** Icon (SVG path). */
18
19
  icon?: string;
19
20
  /** Label content. */
20
- label: string | ReactNode;
21
+ label: string | React.ReactNode;
21
22
  }
22
23
 
23
24
  /**
@@ -30,81 +31,77 @@ const COMPONENT_NAME = 'NavigationSection';
30
31
  */
31
32
  const CLASSNAME = getRootClassName(COMPONENT_NAME);
32
33
 
33
- export const NavigationSection = Object.assign(
34
- forwardRef<HTMLLIElement, NavigationSectionProps>((props, ref) => {
35
- const { children, className, label, icon, ...forwardedProps } = props;
36
- const [isOpen, setIsOpen] = useState(false);
37
- const buttonRef = useRef<HTMLButtonElement>(null);
38
- const sectionId = useId();
39
- const { orientation } = useContext(NavigationContext) || {};
40
- const theme = useTheme();
41
- const isDropdown = orientation === Orientation.horizontal;
42
- return (
43
- <li
44
- className={classNames(
45
- className,
46
- CLASSNAME,
47
- ITEM_CLASSNAME,
48
- handleBasicClasses({
49
- prefix: ITEM_CLASSNAME,
50
- theme,
51
- }),
52
- )}
53
- ref={ref}
34
+ export const NavigationSection = forwardRef<NavigationSectionProps, HTMLLIElement>((props, ref) => {
35
+ const { children, className, label, icon, ...forwardedProps } = props;
36
+ const [isOpen, setIsOpen] = useState(false);
37
+ const buttonRef = useRef<HTMLButtonElement>(null);
38
+ const sectionId = useId();
39
+ const { orientation } = useContext(NavigationContext) || {};
40
+ const theme = useTheme();
41
+ const isDropdown = orientation === Orientation.horizontal;
42
+ return (
43
+ <li
44
+ className={classNames(
45
+ className,
46
+ CLASSNAME,
47
+ ITEM_CLASSNAME,
48
+ handleBasicClasses({
49
+ prefix: ITEM_CLASSNAME,
50
+ theme,
51
+ }),
52
+ )}
53
+ ref={ref}
54
+ >
55
+ <button
56
+ {...forwardedProps}
57
+ aria-controls={sectionId}
58
+ aria-expanded={isOpen}
59
+ className={classNames(`${ITEM_CLASSNAME}__link`)}
60
+ ref={buttonRef}
61
+ onClick={(event) => {
62
+ setIsOpen(!isOpen);
63
+ event.stopPropagation();
64
+ }}
65
+ type="button"
54
66
  >
55
- <button
56
- {...forwardedProps}
57
- aria-controls={sectionId}
58
- aria-expanded={isOpen}
59
- className={classNames(`${ITEM_CLASSNAME}__link`)}
60
- ref={buttonRef}
61
- onClick={(event) => {
62
- setIsOpen(!isOpen);
63
- event.stopPropagation();
64
- }}
65
- type="button"
66
- >
67
- {icon ? <Icon className={`${ITEM_CLASSNAME}__icon`} icon={icon} size={Size.xs} /> : null}
67
+ {icon ? <Icon className={`${ITEM_CLASSNAME}__icon`} icon={icon} size={Size.xs} /> : null}
68
68
 
69
- <Text as="span" truncate className={`${ITEM_CLASSNAME}__label`} ref={ref}>
70
- {label}
71
- </Text>
72
- <Icon
73
- className={classNames(`${ITEM_CLASSNAME}__icon`, `${CLASSNAME}__chevron`)}
74
- icon={isOpen ? mdiChevronUp : mdiChevronDown}
75
- />
76
- </button>
77
- {isOpen &&
78
- (isDropdown ? (
79
- <Popover
80
- anchorRef={buttonRef}
81
- isOpen={isOpen}
82
- placement={Placement.BOTTOM_START}
83
- usePortal={false}
84
- closeOnClickAway
85
- closeOnEscape
86
- onClick={() => setIsOpen(false)}
87
- onClose={() => setIsOpen(false)}
88
- zIndex={996}
89
- >
90
- <ThemeProvider value={Theme.light}>
91
- <ul className={`${CLASSNAME}__drawer--popover`} id={sectionId}>
92
- <NavigationContext.Provider value={{ orientation: Orientation.vertical }}>
93
- {children}
94
- </NavigationContext.Provider>
95
- </ul>
96
- </ThemeProvider>
97
- </Popover>
98
- ) : (
99
- <ul className={`${CLASSNAME}__drawer`} id={sectionId}>
100
- {children}
101
- </ul>
102
- ))}
103
- </li>
104
- );
105
- }),
106
- {
107
- displayName: COMPONENT_NAME,
108
- className: CLASSNAME,
109
- },
110
- );
69
+ <Text as="span" truncate className={`${ITEM_CLASSNAME}__label`} ref={ref}>
70
+ {label}
71
+ </Text>
72
+ <Icon
73
+ className={classNames(`${ITEM_CLASSNAME}__icon`, `${CLASSNAME}__chevron`)}
74
+ icon={isOpen ? mdiChevronUp : mdiChevronDown}
75
+ />
76
+ </button>
77
+ {isOpen &&
78
+ (isDropdown ? (
79
+ <Popover
80
+ anchorRef={buttonRef}
81
+ isOpen={isOpen}
82
+ placement={Placement.BOTTOM_START}
83
+ usePortal={false}
84
+ closeOnClickAway
85
+ closeOnEscape
86
+ onClick={() => setIsOpen(false)}
87
+ onClose={() => setIsOpen(false)}
88
+ zIndex={996}
89
+ >
90
+ <ThemeProvider value={Theme.light}>
91
+ <ul className={`${CLASSNAME}__drawer--popover`} id={sectionId}>
92
+ <NavigationContext.Provider value={{ orientation: Orientation.vertical }}>
93
+ {children}
94
+ </NavigationContext.Provider>
95
+ </ul>
96
+ </ThemeProvider>
97
+ </Popover>
98
+ ) : (
99
+ <ul className={`${CLASSNAME}__drawer`} id={sectionId}>
100
+ {children}
101
+ </ul>
102
+ ))}
103
+ </li>
104
+ );
105
+ });
106
+ NavigationSection.displayName = COMPONENT_NAME;
107
+ NavigationSection.className = CLASSNAME;
@@ -2,8 +2,6 @@ import React, { useRef } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
 
4
4
  import classNames from 'classnames';
5
- import isFunction from 'lodash/isFunction';
6
-
7
5
  import { Button, Emphasis, Icon, Kind, Size, Theme } from '@lumx/react';
8
6
  import { DOCUMENT, NOTIFICATION_TRANSITION_DURATION } from '@lumx/react/constants';
9
7
  import { NOTIFICATION_CONFIGURATION } from '@lumx/react/components/notification/constants';
@@ -88,9 +86,7 @@ export const Notification = forwardRef<NotificationProps, HTMLDivElement>((props
88
86
  const hasAction: boolean = Boolean(onActionClick) && Boolean(actionLabel);
89
87
 
90
88
  const handleCallback = (evt: React.MouseEvent) => {
91
- if (isFunction(onActionClick)) {
92
- onActionClick();
93
- }
89
+ onActionClick?.();
94
90
  evt.stopPropagation();
95
91
  };
96
92
 
@@ -1,10 +1,12 @@
1
1
  import React, { useEffect, useMemo, useState } from 'react';
2
- import memoize from 'lodash/memoize';
2
+
3
3
  import { detectOverflow } from '@popperjs/core';
4
4
 
5
5
  import { DOCUMENT, WINDOW } from '@lumx/react/constants';
6
6
  import { PopoverProps } from '@lumx/react/components/popover/Popover';
7
7
  import { usePopper } from '@lumx/react/hooks/usePopper';
8
+ import { memoize } from '@lumx/react/utils/function/memoize';
9
+
8
10
  import { ARROW_SIZE, FitAnchorWidth, Placement } from './constants';
9
11
 
10
12
  /**
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { getFirstAndLastFocusable } from '@lumx/react/utils/focus/getFirstAndLastFocusable';
2
+ import { getFirstAndLastFocusable } from '@lumx/react/utils/browser/focus/getFirstAndLastFocusable';
3
3
  import { OnBeforeUnmount } from '@lumx/react/utils/OnBeforeUnmount';
4
4
  import type { PopoverProps } from './Popover';
5
5
 
@@ -5,7 +5,7 @@ import userEvent from '@testing-library/user-event';
5
5
  import { PopoverDialog } from './PopoverDialog';
6
6
  import { WithButtonTrigger, WithIconButtonTrigger } from './PopoverDialog.stories';
7
7
 
8
- jest.mock('@lumx/react/utils/isFocusVisible');
8
+ jest.mock('@lumx/react/utils/browser/isFocusVisible');
9
9
 
10
10
  describe(`<${PopoverDialog.displayName}>`, () => {
11
11
  it('should open and init focus', async () => {
@@ -1,8 +1,6 @@
1
1
  import React, { ReactNode } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import isObject from 'lodash/isObject';
5
-
6
4
  import { Orientation, Theme, Thumbnail, ThumbnailProps, ThumbnailVariant } from '@lumx/react';
7
5
  import { GenericProps, HasTheme } from '@lumx/react/utils/type';
8
6
  import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
@@ -77,6 +75,9 @@ export const PostBlock = forwardRef<PostBlockProps, HTMLDivElement>((props, ref)
77
75
  ...forwardedProps
78
76
  } = props;
79
77
 
78
+ // Display text as string or HTML
79
+ const textContent = typeof text === 'string' ? { children: text } : { dangerouslySetInnerHTML: text };
80
+
80
81
  return (
81
82
  <div
82
83
  ref={ref}
@@ -99,12 +100,7 @@ export const PostBlock = forwardRef<PostBlockProps, HTMLDivElement>((props, ref)
99
100
 
100
101
  {meta && <span className={`${CLASSNAME}__meta`}>{meta}</span>}
101
102
 
102
- {isObject(text) && text.__html ? (
103
- // eslint-disable-next-line react/no-danger
104
- <p dangerouslySetInnerHTML={text} className={`${CLASSNAME}__text`} />
105
- ) : (
106
- <p className={`${CLASSNAME}__text`}>{text}</p>
107
- )}
103
+ <p className={`${CLASSNAME}__text`} {...textContent} />
108
104
 
109
105
  {attachments && <div className={`${CLASSNAME}__attachments`}>{attachments}</div>}
110
106
  {(tags || actions) && (
@@ -8,8 +8,6 @@ import {
8
8
  ProgressTrackerStep,
9
9
  ProgressTrackerStepPanel,
10
10
  } from '@lumx/react';
11
- import cloneDeep from 'lodash/cloneDeep';
12
- import set from 'lodash/set';
13
11
  import React, { useState } from 'react';
14
12
 
15
13
  export default { title: 'LumX components/progress-tracker/Progress Tracker' };
@@ -52,24 +50,26 @@ export const Controlled = () => {
52
50
  ]);
53
51
 
54
52
  const toggleError = (index: number) => () => {
55
- const clonedSteps = cloneDeep(steps);
56
- set(clonedSteps, [index, 'hasError'], !steps[index].hasError);
57
- set(clonedSteps, [index, 'isComplete'], false);
58
- setSteps(clonedSteps);
53
+ const newSteps = [...steps];
54
+ const step = steps[index];
55
+ const newStep = { ...step, hasError: !step?.hasError, isComplete: false };
56
+ newSteps[index] = newStep;
57
+ setSteps(newSteps);
59
58
  };
60
59
 
61
60
  const previous = (index: number) => () => setActiveStep(index - 1);
62
61
 
63
62
  const next = (index: number) => () => {
64
63
  const isLast = index === steps.length - 1;
65
- const clonedSteps = cloneDeep(steps);
66
- set(clonedSteps, [index, 'isComplete'], true);
67
- set(clonedSteps, [index, 'hasError'], false);
64
+ const step = steps[index];
65
+ const newSteps = [...steps];
66
+ const newStep = { ...step, hasError: false, isComplete: true };
68
67
  if (!isLast) {
69
- set(clonedSteps, [index + 1, 'isDisabled'], false);
68
+ newSteps[index + 1].isDisabled = false;
70
69
  setActiveStep(index + 1);
71
70
  }
72
- setSteps(clonedSteps);
71
+ newSteps[index] = newStep;
72
+ setSteps(newSteps);
73
73
  };
74
74
 
75
75
  return (
@@ -1,7 +1,6 @@
1
1
  import { mdiBullhornOutline } from '@lumx/icons';
2
2
  import { List, ListItem, Select, Size, TextField } from '@lumx/react';
3
3
  import { useBooleanState } from '@lumx/react/hooks/useBooleanState';
4
- import noop from 'lodash/noop';
5
4
  import range from 'lodash/range';
6
5
  import React, { SyntheticEvent, useState } from 'react';
7
6
  import { SelectVariant } from './constants';
@@ -9,6 +8,10 @@ import { SelectVariant } from './constants';
9
8
  export default {
10
9
  title: 'LumX components/select/Select',
11
10
  component: Select,
11
+ argTypes: {
12
+ onInputClick: { action: true },
13
+ onDropdownClose: { action: true },
14
+ },
12
15
  };
13
16
 
14
17
  const CHOICES = ['First item', 'Second item', 'Third item'];
@@ -109,7 +112,7 @@ export const SimpleSelectWithInfiniteScroll = ({ theme }: any) => {
109
112
  );
110
113
  };
111
114
 
112
- export const DisabledSelect = ({ theme }: any) => {
115
+ export const DisabledSelect = ({ theme, onInputClick, onDropdownClose }: any) => {
113
116
  return (
114
117
  <Select
115
118
  isOpen={false}
@@ -117,8 +120,8 @@ export const DisabledSelect = ({ theme }: any) => {
117
120
  label="My select"
118
121
  placeholder="Placeholder"
119
122
  theme={theme}
120
- onInputClick={noop}
121
- onDropdownClose={noop}
123
+ onInputClick={onInputClick}
124
+ onDropdownClose={onDropdownClose}
122
125
  isDisabled
123
126
  >
124
127
  <List theme={theme} isClickable>
@@ -206,7 +209,13 @@ export const SelectWithAnotherField = ({ theme }: any) => {
206
209
 
207
210
  return (
208
211
  <>
209
- <TextField value="myvalue" label="I am the label" placeholder="ex: A value" theme={theme} onChange={noop} />
212
+ <TextField
213
+ value="myvalue"
214
+ label="I am the label"
215
+ placeholder="ex: A value"
216
+ theme={theme}
217
+ onChange={() => {}}
218
+ />
210
219
  <Select
211
220
  style={{ width: '100%' }}
212
221
  isOpen={isOpen}
@@ -7,13 +7,13 @@ import { getByClassName, queryAllByClassName, queryByClassName } from '@lumx/rea
7
7
  import { render, within } from '@testing-library/react';
8
8
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
9
9
  import userEvent from '@testing-library/user-event';
10
- import { isFocusVisible } from '@lumx/react/utils/isFocusVisible';
10
+ import { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';
11
11
 
12
12
  import { Select, SelectProps, SelectVariant } from './Select';
13
13
 
14
14
  const CLASSNAME = Select.className as string;
15
15
 
16
- jest.mock('@lumx/react/utils/isFocusVisible');
16
+ jest.mock('@lumx/react/utils/browser/isFocusVisible');
17
17
  jest.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
18
18
 
19
19
  /**
@@ -1,7 +1,6 @@
1
1
  import React, { RefObject } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import lodashIsEmpty from 'lodash/isEmpty';
5
4
 
6
5
  import { mdiAlertCircle, mdiCheckCircle, mdiCloseCircle, mdiMenuDown } from '@lumx/icons';
7
6
  import { Emphasis, Size, Theme } from '@lumx/react/components';
@@ -170,7 +169,7 @@ const SelectField: React.FC<SelectProps> = (props) => {
170
169
  * @return React element.
171
170
  */
172
171
  export const Select = forwardRef<SelectProps, HTMLDivElement>((props, ref) => {
173
- const isEmpty = lodashIsEmpty(props.value);
172
+ const isEmpty = !props.value;
174
173
  const hasInputClear = props.onClear && props.clearButtonProps && !isEmpty;
175
174
 
176
175
  return WithSelectContext(
@@ -13,11 +13,13 @@ import {
13
13
  Toolbar,
14
14
  } from '@lumx/react';
15
15
  import { useBooleanState } from '@lumx/react/hooks/useBooleanState';
16
- import noop from 'lodash/noop';
17
16
  import React, { MouseEventHandler, SyntheticEvent, useRef, useState } from 'react';
18
17
  import { SelectVariant } from './constants';
19
18
 
20
- export default { title: 'LumX components/select/Select Multiple' };
19
+ export default {
20
+ title: 'LumX components/select/Select Multiple',
21
+ argTypes: { onClear: { action: true }, onInputClick: { action: true }, onDropdownClose: { action: true } },
22
+ };
21
23
 
22
24
  const PLACEHOLDER = 'Select values';
23
25
  const LABEL = 'Select label';
@@ -76,18 +78,18 @@ export const DefaultSelectMultiple = ({ theme }: any) => {
76
78
  );
77
79
  };
78
80
 
79
- export const SelectMultipleWithNoData = ({ theme }: any) => {
81
+ export const SelectMultipleWithNoData = ({ theme, onClear, onInputClick, onDropdownClose }: any) => {
80
82
  return (
81
83
  <SelectMultiple
82
84
  isOpen
83
85
  value={[]}
84
- onClear={noop}
86
+ onClear={onClear}
85
87
  clearButtonProps={{ label: 'Clear' }}
86
88
  label="Select label"
87
89
  placeholder="Select values"
88
90
  theme={theme}
89
- onInputClick={noop}
90
- onDropdownClose={noop}
91
+ onInputClick={onInputClick}
92
+ onDropdownClose={onDropdownClose}
91
93
  >
92
94
  <List isClickable>
93
95
  <ListItem key={0} size={Size.tiny}>
@@ -98,18 +100,18 @@ export const SelectMultipleWithNoData = ({ theme }: any) => {
98
100
  );
99
101
  };
100
102
 
101
- export const DisabledSelectMultiple = ({ theme }: any) => {
103
+ export const DisabledSelectMultiple = ({ theme, onClear, onInputClick, onDropdownClose }: any) => {
102
104
  return (
103
105
  <SelectMultiple
104
106
  isOpen
105
107
  value={[]}
106
- onClear={noop}
108
+ onClear={onClear}
107
109
  clearButtonProps={{ label: 'Clear' }}
108
110
  label="Select label"
109
111
  placeholder="Select values"
110
112
  theme={theme}
111
- onInputClick={noop}
112
- onDropdownClose={noop}
113
+ onInputClick={onInputClick}
114
+ onDropdownClose={onDropdownClose}
113
115
  isDisabled
114
116
  />
115
117
  );
@@ -1,7 +1,6 @@
1
1
  import React, { Children, ReactNode } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import isEmpty from 'lodash/isEmpty';
5
4
 
6
5
  import { mdiChevronDown, mdiChevronUp } from '@lumx/icons';
7
6
  import { Emphasis, Icon, Size, IconButton, IconButtonProps } from '@lumx/react';
@@ -11,6 +10,7 @@ import { renderLink } from '@lumx/react/utils/renderLink';
11
10
  import { renderButtonOrLink } from '@lumx/react/utils/renderButtonOrLink';
12
11
  import { useId } from '@lumx/react/hooks/useId';
13
12
  import { forwardRef } from '@lumx/react/utils/react/forwardRef';
13
+ import { isEmpty } from '@lumx/react/utils/collection/isEmpty';
14
14
 
15
15
  /**
16
16
  * Defines the props of the component.
@@ -1,6 +1,5 @@
1
1
  import React, { Children, CSSProperties } from 'react';
2
2
 
3
- import chunk from 'lodash/chunk';
4
3
  import classNames from 'classnames';
5
4
 
6
5
  import { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
@@ -8,6 +7,7 @@ import { GenericProps, HasTheme } from '@lumx/react/utils/type';
8
7
  import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
9
8
  import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
10
9
  import { forwardRef } from '@lumx/react/utils/react/forwardRef';
10
+ import { chunk } from '@lumx/react/utils/collection/chunk';
11
11
 
12
12
  import { buildSlideShowGroupId, SlideshowItemGroup } from './SlideshowItemGroup';
13
13
 
@@ -1,7 +1,6 @@
1
1
  import React, { RefObject, useCallback, useMemo } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import range from 'lodash/range';
5
4
 
6
5
  import { mdiChevronLeft, mdiChevronRight, mdiPlayCircleOutline, mdiPauseCircleOutline } from '@lumx/icons';
7
6
  import { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';
@@ -16,6 +15,7 @@ import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
16
15
  import { useSwipeNavigate } from './useSwipeNavigate';
17
16
  import { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';
18
17
  import { usePaginationVisibleRange } from './usePaginationVisibleRange';
18
+ import { range } from '@lumx/react/utils/collection/range';
19
19
 
20
20
  /**
21
21
  * Defines the props of the component.
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect } from 'react';
2
- import { getFocusableElements } from '@lumx/react/utils/focus/getFocusableElements';
2
+ import { getFocusableElements } from '@lumx/react/utils/browser/focus/getFocusableElements';
3
3
 
4
4
  export interface UseSlideFocusManagementProps {
5
5
  isSlideDisplayed?: boolean;
@@ -1,7 +1,6 @@
1
1
  import React, { Children, InputHTMLAttributes, SyntheticEvent } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import isEmpty from 'lodash/isEmpty';
5
4
 
6
5
  import { Alignment, InputHelper, InputLabel, Theme } from '@lumx/react';
7
6
  import { GenericProps, HasTheme } from '@lumx/react/utils/type';
@@ -127,7 +126,7 @@ export const Switch = forwardRef<SwitchProps, HTMLDivElement>((props, ref) => {
127
126
  <InputLabel htmlFor={inputId} theme={theme} className={`${CLASSNAME}__label`}>
128
127
  {children}
129
128
  </InputLabel>
130
- {!isEmpty(helper) && (
129
+ {helper && (
131
130
  <InputHelper id={`${inputId}-helper`} theme={theme} className={`${CLASSNAME}__helper`}>
132
131
  {helper}
133
132
  </InputHelper>
@@ -6,7 +6,6 @@ import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
6
6
  import { withNestedProps } from '@lumx/react/stories/decorators/withNestedProps';
7
7
  import { toFlattenProps } from '@lumx/react/stories/utils/toFlattenProps';
8
8
  import { withCategory } from '@lumx/react/stories/utils/withCategory';
9
- import get from 'lodash/get';
10
9
  import times from 'lodash/times';
11
10
  import React, { useState } from 'react';
12
11
 
@@ -63,13 +62,13 @@ export const Default = {
63
62
  export const Controlled = {
64
63
  render({ theme }: any) {
65
64
  const [activeTab, setActiveTab] = useState(1);
66
- const changeActiveTabIndex = (evt: any) => setActiveTab(parseInt(get(evt, 'target.value', '0'), 10));
65
+ const changeActiveTabIndex = (evt: any) => setActiveTab(parseInt(evt.target.value || 0, 10));
67
66
 
68
67
  const [isLazy, setIsLazy] = useState(true);
69
- const changeIsLazy = (evt: any) => setIsLazy(get(evt, 'target.checked'));
68
+ const changeIsLazy = (evt: any) => setIsLazy(evt.target.checked);
70
69
 
71
70
  const [shouldActivateOnFocus, setShouldActivateOnFocus] = useState(true);
72
- const changeShouldActivateOnFocus = (evt: any) => setShouldActivateOnFocus(get(evt, 'target.checked'));
71
+ const changeShouldActivateOnFocus = (evt: any) => setShouldActivateOnFocus(evt.target.checked);
73
72
 
74
73
  return (
75
74
  <>
@@ -12,15 +12,15 @@ import {
12
12
  queryByClassName,
13
13
  queryByTagName,
14
14
  } from '@lumx/react/testing/utils/queries';
15
- import partition from 'lodash/partition';
16
15
  import userEvent from '@testing-library/user-event';
17
16
 
18
- import { isFocusVisible } from '@lumx/react/utils/isFocusVisible';
17
+ import { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';
18
+ import { partitionMulti } from '@lumx/react/utils/collection/partitionMulti';
19
19
  import { TextField, TextFieldProps } from './TextField';
20
20
 
21
21
  const CLASSNAME = TextField.className as string;
22
22
 
23
- jest.mock('@lumx/react/utils/isFocusVisible');
23
+ jest.mock('@lumx/react/utils/browser/isFocusVisible');
24
24
 
25
25
  /**
26
26
  * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
@@ -34,7 +34,7 @@ const setup = (propsOverride: Partial<TextFieldProps> = {}, { wrapper }: SetupRe
34
34
  | HTMLTextAreaElement
35
35
  | HTMLInputElement;
36
36
  const helpers = queryAllByClassName(container, 'lumx-text-field__helper');
37
- const [[helper], [error]] = partition(helpers, (h) => !h.className.includes('lumx-input-helper--color-red'));
37
+ const [[helper], [error]] = partitionMulti(helpers, [(h) => !h.className.includes('lumx-input-helper--color-red')]);
38
38
  const clearButton = queryByClassName(container, 'lumx-text-field__input-clear');
39
39
 
40
40
  return {
@@ -1,7 +1,6 @@
1
1
  import React, { ReactNode, Ref, RefObject, SyntheticEvent, useEffect, useRef, useState } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
- import get from 'lodash/get';
5
4
 
6
5
  import { mdiAlertCircle, mdiCheckCircle, mdiCloseCircle } from '@lumx/icons';
7
6
  import {
@@ -217,8 +216,8 @@ const renderInputNative: React.FC<InputNativeProps> = (props) => {
217
216
  setFocus(false);
218
217
  };
219
218
 
220
- const handleChange = (event: React.ChangeEvent) => {
221
- onChange(get(event, 'target.value'), name, event);
219
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
220
+ onChange(event.target.value, name, event);
222
221
  };
223
222
 
224
223
  const Component = multiline ? 'textarea' : 'input';
@@ -5,14 +5,14 @@ import { screen, render } from '@testing-library/react';
5
5
  import { queryAllByTagName, queryByClassName } from '@lumx/react/testing/utils/queries';
6
6
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
7
7
  import userEvent from '@testing-library/user-event';
8
- import { isFocusVisible } from '@lumx/react/utils/isFocusVisible';
8
+ import { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';
9
9
  import { VISUALLY_HIDDEN } from '@lumx/react/constants';
10
10
 
11
11
  import { Tooltip, TooltipProps } from './Tooltip';
12
12
 
13
13
  const CLASSNAME = Tooltip.className as string;
14
14
 
15
- jest.mock('@lumx/react/utils/isFocusVisible');
15
+ jest.mock('@lumx/react/utils/browser/isFocusVisible');
16
16
  jest.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
17
17
  // Skip delays
18
18
  jest.mock('@lumx/react/constants', () => ({