@itwin/itwinui-react 3.0.4 → 3.0.5

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 (496) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/cjs/core/Alert/Alert.js +46 -106
  3. package/cjs/core/Avatar/Avatar.js +21 -58
  4. package/cjs/core/AvatarGroup/AvatarGroup.js +26 -64
  5. package/cjs/core/Backdrop/Backdrop.js +8 -16
  6. package/cjs/core/Badge/Badge.js +22 -39
  7. package/cjs/core/Breadcrumbs/Breadcrumbs.js +61 -138
  8. package/cjs/core/ButtonGroup/ButtonGroup.js +32 -68
  9. package/cjs/core/Buttons/Button.js +11 -57
  10. package/cjs/core/Buttons/DropdownButton.js +15 -49
  11. package/cjs/core/Buttons/IconButton.js +13 -53
  12. package/cjs/core/Buttons/IdeasButton.js +8 -20
  13. package/cjs/core/Buttons/SplitButton.js +43 -103
  14. package/cjs/core/Carousel/Carousel.js +54 -78
  15. package/cjs/core/Carousel/CarouselContext.js +4 -4
  16. package/cjs/core/Carousel/CarouselDot.js +12 -23
  17. package/cjs/core/Carousel/CarouselDotsList.js +92 -153
  18. package/cjs/core/Carousel/CarouselNavigation.js +41 -84
  19. package/cjs/core/Carousel/CarouselSlide.js +26 -49
  20. package/cjs/core/Carousel/CarouselSlider.js +47 -66
  21. package/cjs/core/Checkbox/Checkbox.js +32 -88
  22. package/cjs/core/ColorPicker/ColorBuilder.js +174 -292
  23. package/cjs/core/ColorPicker/ColorInputPanel.js +246 -411
  24. package/cjs/core/ColorPicker/ColorPalette.js +23 -47
  25. package/cjs/core/ColorPicker/ColorPicker.js +53 -87
  26. package/cjs/core/ColorPicker/ColorPickerContext.js +9 -11
  27. package/cjs/core/ColorPicker/ColorSwatch.js +15 -40
  28. package/cjs/core/ComboBox/ComboBox.js +280 -402
  29. package/cjs/core/ComboBox/ComboBoxEndIcon.js +12 -28
  30. package/cjs/core/ComboBox/ComboBoxInput.js +131 -207
  31. package/cjs/core/ComboBox/ComboBoxInputContainer.js +12 -35
  32. package/cjs/core/ComboBox/ComboBoxMenu.js +43 -87
  33. package/cjs/core/ComboBox/ComboBoxMenuItem.js +21 -73
  34. package/cjs/core/ComboBox/ComboBoxMultipleContainer.js +7 -13
  35. package/cjs/core/ComboBox/helpers.js +43 -47
  36. package/cjs/core/DatePicker/DatePicker.js +333 -569
  37. package/cjs/core/Dialog/Dialog.js +36 -65
  38. package/cjs/core/Dialog/DialogBackdrop.js +27 -47
  39. package/cjs/core/Dialog/DialogButtonBar.js +3 -3
  40. package/cjs/core/Dialog/DialogContent.js +18 -26
  41. package/cjs/core/Dialog/DialogContext.js +5 -5
  42. package/cjs/core/Dialog/DialogDragContext.js +8 -8
  43. package/cjs/core/Dialog/DialogMain.js +116 -183
  44. package/cjs/core/Dialog/DialogTitleBar.js +20 -67
  45. package/cjs/core/Dialog/DialogTitleBarTitle.js +3 -3
  46. package/cjs/core/Divider/Divider.js +8 -14
  47. package/cjs/core/DropdownMenu/DropdownMenu.js +46 -80
  48. package/cjs/core/ExpandableBlock/ExpandableBlock.js +101 -206
  49. package/cjs/core/Fieldset/Fieldset.js +14 -25
  50. package/cjs/core/FileUpload/FileEmptyCard.js +17 -43
  51. package/cjs/core/FileUpload/FileUpload.js +42 -88
  52. package/cjs/core/FileUpload/FileUploadCard.js +84 -169
  53. package/cjs/core/FileUpload/FileUploadTemplate.js +16 -51
  54. package/cjs/core/Flex/Flex.js +77 -93
  55. package/cjs/core/Footer/Footer.js +64 -103
  56. package/cjs/core/Footer/FooterItem.js +3 -3
  57. package/cjs/core/Footer/FooterList.js +3 -3
  58. package/cjs/core/Footer/FooterSeparator.js +5 -8
  59. package/cjs/core/Header/Header.js +22 -67
  60. package/cjs/core/Header/HeaderBasicButton.js +13 -24
  61. package/cjs/core/Header/HeaderBreadcrumbs.js +14 -38
  62. package/cjs/core/Header/HeaderButton.js +22 -76
  63. package/cjs/core/Header/HeaderDropdownButton.js +20 -48
  64. package/cjs/core/Header/HeaderLogo.js +11 -42
  65. package/cjs/core/Header/HeaderSplitButton.js +21 -66
  66. package/cjs/core/Icon/Icon.js +18 -32
  67. package/cjs/core/InformationPanel/InformationPanel.js +42 -77
  68. package/cjs/core/InformationPanel/InformationPanelBody.js +4 -6
  69. package/cjs/core/InformationPanel/InformationPanelContent.js +8 -20
  70. package/cjs/core/InformationPanel/InformationPanelHeader.js +14 -34
  71. package/cjs/core/InformationPanel/InformationPanelWrapper.js +4 -6
  72. package/cjs/core/Input/Input.js +10 -18
  73. package/cjs/core/InputGrid/InputGrid.js +8 -17
  74. package/cjs/core/InputGroup/InputGroup.js +25 -72
  75. package/cjs/core/InputWithDecorations/InputWithDecorations.js +23 -51
  76. package/cjs/core/Label/Label.js +11 -32
  77. package/cjs/core/LabeledInput/LabeledInput.js +20 -70
  78. package/cjs/core/LabeledSelect/LabeledSelect.js +28 -77
  79. package/cjs/core/LabeledTextarea/LabeledTextarea.js +7 -13
  80. package/cjs/core/LinkAction/LinkAction.js +3 -3
  81. package/cjs/core/List/List.js +3 -3
  82. package/cjs/core/List/ListItem.js +35 -55
  83. package/cjs/core/Menu/Menu.js +53 -66
  84. package/cjs/core/Menu/MenuDivider.js +4 -4
  85. package/cjs/core/Menu/MenuExtraContent.js +4 -4
  86. package/cjs/core/Menu/MenuItem.js +92 -168
  87. package/cjs/core/Menu/MenuItemSkeleton.js +19 -54
  88. package/cjs/core/Modal/Modal.js +11 -38
  89. package/cjs/core/Modal/ModalButtonBar.js +4 -7
  90. package/cjs/core/Modal/ModalContent.js +3 -3
  91. package/cjs/core/NonIdealState/ErrorPage.js +131 -187
  92. package/cjs/core/NonIdealState/NonIdealState.js +12 -77
  93. package/cjs/core/NotificationMarker/NotificationMarker.js +8 -29
  94. package/cjs/core/Overlay/Overlay.d.ts +20 -24
  95. package/cjs/core/Overlay/Overlay.js +50 -64
  96. package/cjs/core/Popover/Popover.js +87 -157
  97. package/cjs/core/ProgressIndicators/ProgressLinear.js +11 -49
  98. package/cjs/core/ProgressIndicators/ProgressRadial.js +19 -51
  99. package/cjs/core/Radio/Radio.js +12 -54
  100. package/cjs/core/RadioTiles/RadioTile.js +14 -80
  101. package/cjs/core/RadioTiles/RadioTileGroup.js +9 -16
  102. package/cjs/core/SearchBox/SearchBox.js +104 -221
  103. package/cjs/core/Select/Select.js +141 -276
  104. package/cjs/core/Select/SelectTag.js +9 -21
  105. package/cjs/core/Select/SelectTagContainer.js +14 -30
  106. package/cjs/core/SideNavigation/SideNavigation.js +29 -138
  107. package/cjs/core/SideNavigation/SidenavButton.js +8 -30
  108. package/cjs/core/SideNavigation/SidenavSubmenu.js +9 -23
  109. package/cjs/core/SideNavigation/SidenavSubmenuHeader.js +10 -29
  110. package/cjs/core/SkipToContentLink/SkipToContentLink.js +8 -20
  111. package/cjs/core/Slider/Slider.js +195 -376
  112. package/cjs/core/Slider/Thumb.js +57 -108
  113. package/cjs/core/Slider/Track.js +55 -83
  114. package/cjs/core/StatusMessage/StatusMessage.js +12 -34
  115. package/cjs/core/Stepper/Stepper.js +21 -80
  116. package/cjs/core/Stepper/StepperStep.js +36 -109
  117. package/cjs/core/Stepper/WorkflowDiagram.js +15 -38
  118. package/cjs/core/Stepper/WorkflowDiagramStep.js +11 -39
  119. package/cjs/core/Surface/Surface.js +54 -94
  120. package/cjs/core/Table/SubRowExpander.js +15 -37
  121. package/cjs/core/Table/Table.js +419 -763
  122. package/cjs/core/Table/TableCell.js +63 -113
  123. package/cjs/core/Table/TablePaginator.js +136 -312
  124. package/cjs/core/Table/TableRowMemoized.js +64 -137
  125. package/cjs/core/Table/actionHandlers/expandHandler.js +12 -12
  126. package/cjs/core/Table/actionHandlers/filterHandler.js +17 -25
  127. package/cjs/core/Table/actionHandlers/index.js +14 -56
  128. package/cjs/core/Table/actionHandlers/resizeHandler.js +13 -13
  129. package/cjs/core/Table/actionHandlers/selectHandler.js +98 -128
  130. package/cjs/core/Table/cells/DefaultCell.js +13 -48
  131. package/cjs/core/Table/cells/EditableCell.js +46 -75
  132. package/cjs/core/Table/cells/index.js +6 -16
  133. package/cjs/core/Table/columns/actionColumn.js +67 -97
  134. package/cjs/core/Table/columns/expanderColumn.js +32 -46
  135. package/cjs/core/Table/columns/index.js +11 -41
  136. package/cjs/core/Table/columns/selectionColumn.js +29 -57
  137. package/cjs/core/Table/filters/BaseFilter.js +13 -24
  138. package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.js +52 -120
  139. package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.js +60 -120
  140. package/cjs/core/Table/filters/FilterButtonBar.js +16 -39
  141. package/cjs/core/Table/filters/FilterToggle.js +26 -62
  142. package/cjs/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +36 -58
  143. package/cjs/core/Table/filters/TextFilter/TextFilter.js +28 -40
  144. package/cjs/core/Table/filters/customFilterFunctions.js +14 -16
  145. package/cjs/core/Table/filters/defaultFilterFunctions.js +81 -86
  146. package/cjs/core/Table/filters/index.js +11 -35
  147. package/cjs/core/Table/filters/tableFilters.js +32 -44
  148. package/cjs/core/Table/filters/types.js +2 -2
  149. package/cjs/core/Table/hooks/index.js +19 -67
  150. package/cjs/core/Table/hooks/useColumnDragAndDrop.js +86 -101
  151. package/cjs/core/Table/hooks/useExpanderCell.js +25 -33
  152. package/cjs/core/Table/hooks/useResizeColumns.js +290 -362
  153. package/cjs/core/Table/hooks/useScrollToRow.js +38 -46
  154. package/cjs/core/Table/hooks/useSelectionCell.js +10 -17
  155. package/cjs/core/Table/hooks/useStickyColumns.js +62 -64
  156. package/cjs/core/Table/hooks/useSubRowFiltering.js +88 -95
  157. package/cjs/core/Table/hooks/useSubRowSelection.js +31 -32
  158. package/cjs/core/Table/index.js +18 -78
  159. package/cjs/core/Table/utils.js +40 -42
  160. package/cjs/core/Tabs/Tabs.js +232 -417
  161. package/cjs/core/Tag/Tag.js +15 -42
  162. package/cjs/core/Tag/TagContainer.js +11 -23
  163. package/cjs/core/Textarea/Textarea.js +6 -11
  164. package/cjs/core/ThemeProvider/ThemeContext.js +4 -4
  165. package/cjs/core/ThemeProvider/ThemeProvider.js +52 -105
  166. package/cjs/core/Tile/Tile.js +230 -410
  167. package/cjs/core/TimePicker/TimePicker.js +234 -458
  168. package/cjs/core/Toast/Toast.js +107 -204
  169. package/cjs/core/Toast/Toaster.js +77 -102
  170. package/cjs/core/ToggleSwitch/ToggleSwitch.js +23 -66
  171. package/cjs/core/Tooltip/Tooltip.js +91 -137
  172. package/cjs/core/TransferList/TransferList.js +103 -177
  173. package/cjs/core/Tree/Tree.js +129 -204
  174. package/cjs/core/Tree/TreeContext.js +9 -9
  175. package/cjs/core/Tree/TreeNode.js +104 -207
  176. package/cjs/core/Tree/TreeNodeExpander.js +12 -26
  177. package/cjs/core/Typography/Anchor.js +3 -3
  178. package/cjs/core/Typography/Blockquote.js +10 -18
  179. package/cjs/core/Typography/Code.js +3 -3
  180. package/cjs/core/Typography/Kbd.js +21 -30
  181. package/cjs/core/Typography/Text.js +13 -26
  182. package/cjs/core/VisuallyHidden/VisuallyHidden.js +8 -14
  183. package/cjs/core/utils/color/ColorValue.js +453 -535
  184. package/cjs/core/utils/color/index.js +4 -4
  185. package/cjs/core/utils/components/AutoclearingHiddenLiveRegion.js +13 -20
  186. package/cjs/core/utils/components/Box.js +3 -3
  187. package/cjs/core/utils/components/ButtonBase.js +20 -38
  188. package/cjs/core/utils/components/FocusTrap.js +38 -47
  189. package/cjs/core/utils/components/InputContainer.js +19 -58
  190. package/cjs/core/utils/components/InputFlexContainer.js +8 -24
  191. package/cjs/core/utils/components/MiddleTextTruncation.js +22 -32
  192. package/cjs/core/utils/components/Portal.js +20 -22
  193. package/cjs/core/utils/components/Resizer.js +196 -253
  194. package/cjs/core/utils/components/VirtualScroll.js +223 -304
  195. package/cjs/core/utils/components/WithCSSTransition.js +32 -49
  196. package/cjs/core/utils/components/index.js +14 -14
  197. package/cjs/core/utils/functions/colors.js +22 -25
  198. package/cjs/core/utils/functions/date.js +10 -10
  199. package/cjs/core/utils/functions/dev.js +14 -13
  200. package/cjs/core/utils/functions/dom.js +17 -24
  201. package/cjs/core/utils/functions/focusable.js +17 -26
  202. package/cjs/core/utils/functions/import.js +23 -46
  203. package/cjs/core/utils/functions/index.js +13 -13
  204. package/cjs/core/utils/functions/numbers.js +9 -9
  205. package/cjs/core/utils/functions/polymorphic.js +30 -43
  206. package/cjs/core/utils/functions/react.js +24 -26
  207. package/cjs/core/utils/functions/supports.js +4 -5
  208. package/cjs/core/utils/hooks/index.js +17 -17
  209. package/cjs/core/utils/hooks/useContainerWidth.js +19 -26
  210. package/cjs/core/utils/hooks/useControlledState.js +12 -21
  211. package/cjs/core/utils/hooks/useDragAndDrop.js +87 -110
  212. package/cjs/core/utils/hooks/useEventListener.js +22 -22
  213. package/cjs/core/utils/hooks/useGlobals.js +27 -33
  214. package/cjs/core/utils/hooks/useId.js +8 -10
  215. package/cjs/core/utils/hooks/useIntersection.js +24 -30
  216. package/cjs/core/utils/hooks/useIsClient.js +9 -9
  217. package/cjs/core/utils/hooks/useIsomorphicLayoutEffect.js +5 -6
  218. package/cjs/core/utils/hooks/useLatestRef.js +9 -9
  219. package/cjs/core/utils/hooks/useMediaQuery.js +31 -31
  220. package/cjs/core/utils/hooks/useMergedRefs.js +16 -15
  221. package/cjs/core/utils/hooks/useOverflow.js +57 -70
  222. package/cjs/core/utils/hooks/useResizeObserver.js +17 -22
  223. package/cjs/core/utils/hooks/useSafeContext.js +9 -9
  224. package/cjs/core/utils/icons/StatusIconMap.js +12 -28
  225. package/cjs/core/utils/icons/Svg.js +3 -3
  226. package/cjs/core/utils/icons/SvgCalendar.js +7 -12
  227. package/cjs/core/utils/icons/SvgCaretDownSmall.js +7 -12
  228. package/cjs/core/utils/icons/SvgCaretRightSmall.js +7 -12
  229. package/cjs/core/utils/icons/SvgCaretUpSmall.js +7 -12
  230. package/cjs/core/utils/icons/SvgCheckmark.js +7 -10
  231. package/cjs/core/utils/icons/SvgCheckmarkSmall.js +7 -12
  232. package/cjs/core/utils/icons/SvgChevronLeft.js +7 -12
  233. package/cjs/core/utils/icons/SvgChevronLeftDouble.js +7 -12
  234. package/cjs/core/utils/icons/SvgChevronRight.js +7 -12
  235. package/cjs/core/utils/icons/SvgChevronRightDouble.js +7 -12
  236. package/cjs/core/utils/icons/SvgClose.js +7 -12
  237. package/cjs/core/utils/icons/SvgCloseSmall.js +7 -12
  238. package/cjs/core/utils/icons/SvgColumnManager.js +7 -12
  239. package/cjs/core/utils/icons/SvgDocument.js +7 -10
  240. package/cjs/core/utils/icons/SvgFilter.js +7 -10
  241. package/cjs/core/utils/icons/SvgFilterHollow.js +7 -12
  242. package/cjs/core/utils/icons/SvgImportantSmall.js +7 -12
  243. package/cjs/core/utils/icons/SvgInfoCircular.js +7 -12
  244. package/cjs/core/utils/icons/SvgMore.js +7 -12
  245. package/cjs/core/utils/icons/SvgMoreVertical.js +7 -12
  246. package/cjs/core/utils/icons/SvgNew.js +7 -12
  247. package/cjs/core/utils/icons/SvgSearch.js +7 -12
  248. package/cjs/core/utils/icons/SvgSmileyHappy.js +7 -12
  249. package/cjs/core/utils/icons/SvgSortDown.js +7 -12
  250. package/cjs/core/utils/icons/SvgSortUp.js +7 -12
  251. package/cjs/core/utils/icons/SvgStatusError.js +7 -12
  252. package/cjs/core/utils/icons/SvgStatusSuccess.js +7 -12
  253. package/cjs/core/utils/icons/SvgStatusWarning.js +7 -12
  254. package/cjs/core/utils/icons/SvgSwap.js +7 -12
  255. package/cjs/core/utils/icons/SvgUpload.js +7 -12
  256. package/cjs/core/utils/icons/index.js +34 -34
  257. package/cjs/core/utils/index.js +10 -10
  258. package/cjs/core/utils/props.js +2 -2
  259. package/cjs/core/utils/types.js +2 -2
  260. package/cjs/index.js +229 -949
  261. package/cjs/react-table/react-table.js +2 -2
  262. package/cjs/styles.js +412 -425
  263. package/esm/core/Alert/Alert.js +39 -106
  264. package/esm/core/Avatar/Avatar.js +14 -42
  265. package/esm/core/AvatarGroup/AvatarGroup.js +20 -58
  266. package/esm/core/Backdrop/Backdrop.js +2 -10
  267. package/esm/core/Badge/Badge.js +16 -31
  268. package/esm/core/Breadcrumbs/Breadcrumbs.js +55 -135
  269. package/esm/core/ButtonGroup/ButtonGroup.js +25 -61
  270. package/esm/core/Buttons/Button.js +5 -45
  271. package/esm/core/Buttons/DropdownButton.js +7 -37
  272. package/esm/core/Buttons/IconButton.js +5 -40
  273. package/esm/core/Buttons/IdeasButton.js +2 -12
  274. package/esm/core/Buttons/SplitButton.js +34 -101
  275. package/esm/core/Carousel/Carousel.js +43 -72
  276. package/esm/core/Carousel/CarouselDot.js +6 -17
  277. package/esm/core/Carousel/CarouselDotsList.js +85 -147
  278. package/esm/core/Carousel/CarouselNavigation.js +32 -68
  279. package/esm/core/Carousel/CarouselSlide.js +19 -41
  280. package/esm/core/Carousel/CarouselSlider.js +41 -65
  281. package/esm/core/Checkbox/Checkbox.js +25 -78
  282. package/esm/core/ColorPicker/ColorBuilder.js +167 -280
  283. package/esm/core/ColorPicker/ColorInputPanel.js +237 -395
  284. package/esm/core/ColorPicker/ColorPalette.js +14 -35
  285. package/esm/core/ColorPicker/ColorPicker.js +46 -79
  286. package/esm/core/ColorPicker/ColorPickerContext.js +5 -7
  287. package/esm/core/ColorPicker/ColorSwatch.js +7 -24
  288. package/esm/core/ComboBox/ComboBox.js +267 -396
  289. package/esm/core/ComboBox/ComboBoxEndIcon.js +5 -18
  290. package/esm/core/ComboBox/ComboBoxInput.js +125 -197
  291. package/esm/core/ComboBox/ComboBoxInputContainer.js +5 -20
  292. package/esm/core/ComboBox/ComboBoxMenu.js +37 -77
  293. package/esm/core/ComboBox/ComboBoxMenuItem.js +14 -61
  294. package/esm/core/ComboBox/ComboBoxMultipleContainer.js +2 -6
  295. package/esm/core/ComboBox/helpers.js +38 -38
  296. package/esm/core/DatePicker/DatePicker.js +326 -555
  297. package/esm/core/Dialog/Dialog.js +24 -53
  298. package/esm/core/Dialog/DialogBackdrop.js +19 -39
  299. package/esm/core/Dialog/DialogContent.js +12 -20
  300. package/esm/core/Dialog/DialogContext.js +1 -1
  301. package/esm/core/Dialog/DialogDragContext.js +4 -4
  302. package/esm/core/Dialog/DialogMain.js +107 -177
  303. package/esm/core/Dialog/DialogTitleBar.js +10 -45
  304. package/esm/core/Divider/Divider.js +2 -8
  305. package/esm/core/DropdownMenu/DropdownMenu.js +40 -75
  306. package/esm/core/ExpandableBlock/ExpandableBlock.js +92 -193
  307. package/esm/core/Fieldset/Fieldset.js +8 -19
  308. package/esm/core/FileUpload/FileEmptyCard.js +8 -19
  309. package/esm/core/FileUpload/FileUpload.js +36 -72
  310. package/esm/core/FileUpload/FileUploadCard.js +76 -153
  311. package/esm/core/FileUpload/FileUploadTemplate.js +9 -37
  312. package/esm/core/Flex/Flex.js +71 -87
  313. package/esm/core/Footer/Footer.js +55 -86
  314. package/esm/core/Footer/FooterSeparator.js +1 -1
  315. package/esm/core/Header/Header.js +14 -55
  316. package/esm/core/Header/HeaderBasicButton.js +7 -15
  317. package/esm/core/Header/HeaderBreadcrumbs.js +8 -32
  318. package/esm/core/Header/HeaderButton.js +14 -62
  319. package/esm/core/Header/HeaderDropdownButton.js +13 -42
  320. package/esm/core/Header/HeaderLogo.js +5 -36
  321. package/esm/core/Header/HeaderSplitButton.js +14 -61
  322. package/esm/core/Icon/Icon.js +12 -26
  323. package/esm/core/InformationPanel/InformationPanel.js +36 -71
  324. package/esm/core/InformationPanel/InformationPanelContent.js +3 -17
  325. package/esm/core/InformationPanel/InformationPanelHeader.js +8 -32
  326. package/esm/core/InformationPanel/InformationPanelWrapper.js +1 -3
  327. package/esm/core/Input/Input.js +4 -12
  328. package/esm/core/InputGrid/InputGrid.js +2 -11
  329. package/esm/core/InputGroup/InputGroup.js +16 -57
  330. package/esm/core/InputWithDecorations/InputWithDecorations.js +11 -42
  331. package/esm/core/Label/Label.js +5 -26
  332. package/esm/core/LabeledInput/LabeledInput.js +10 -63
  333. package/esm/core/LabeledSelect/LabeledSelect.js +18 -67
  334. package/esm/core/LabeledTextarea/LabeledTextarea.js +2 -8
  335. package/esm/core/List/ListItem.js +28 -46
  336. package/esm/core/Menu/Menu.js +48 -64
  337. package/esm/core/Menu/MenuDivider.js +1 -1
  338. package/esm/core/Menu/MenuExtraContent.js +1 -1
  339. package/esm/core/Menu/MenuItem.js +84 -164
  340. package/esm/core/Menu/MenuItemSkeleton.js +12 -43
  341. package/esm/core/Modal/Modal.js +6 -33
  342. package/esm/core/NonIdealState/ErrorPage.js +123 -173
  343. package/esm/core/NonIdealState/NonIdealState.js +6 -65
  344. package/esm/core/NotificationMarker/NotificationMarker.js +2 -20
  345. package/esm/core/Overlay/Overlay.d.ts +20 -24
  346. package/esm/core/Overlay/Overlay.js +45 -55
  347. package/esm/core/Popover/Popover.js +80 -172
  348. package/esm/core/ProgressIndicators/ProgressLinear.js +5 -40
  349. package/esm/core/ProgressIndicators/ProgressRadial.js +14 -40
  350. package/esm/core/Radio/Radio.js +6 -45
  351. package/esm/core/RadioTiles/RadioTile.js +8 -62
  352. package/esm/core/RadioTiles/RadioTileGroup.js +3 -10
  353. package/esm/core/SearchBox/SearchBox.js +97 -214
  354. package/esm/core/Select/Select.js +130 -265
  355. package/esm/core/Select/SelectTag.js +3 -15
  356. package/esm/core/Select/SelectTagContainer.js +7 -20
  357. package/esm/core/SideNavigation/SideNavigation.js +21 -118
  358. package/esm/core/SideNavigation/SidenavButton.js +2 -24
  359. package/esm/core/SideNavigation/SidenavSubmenu.js +3 -14
  360. package/esm/core/SideNavigation/SidenavSubmenuHeader.js +4 -20
  361. package/esm/core/SkipToContentLink/SkipToContentLink.js +2 -11
  362. package/esm/core/Slider/Slider.js +187 -340
  363. package/esm/core/Slider/Thumb.js +50 -97
  364. package/esm/core/Slider/Track.js +49 -74
  365. package/esm/core/StatusMessage/StatusMessage.js +5 -23
  366. package/esm/core/Stepper/Stepper.js +14 -70
  367. package/esm/core/Stepper/StepperStep.js +29 -92
  368. package/esm/core/Stepper/WorkflowDiagram.js +8 -21
  369. package/esm/core/Stepper/WorkflowDiagramStep.js +4 -22
  370. package/esm/core/Surface/Surface.js +48 -84
  371. package/esm/core/Table/SubRowExpander.js +9 -31
  372. package/esm/core/Table/Table.js +408 -763
  373. package/esm/core/Table/TableCell.js +53 -87
  374. package/esm/core/Table/TablePaginator.js +125 -306
  375. package/esm/core/Table/TableRowMemoized.js +58 -129
  376. package/esm/core/Table/actionHandlers/expandHandler.js +10 -10
  377. package/esm/core/Table/actionHandlers/filterHandler.js +15 -23
  378. package/esm/core/Table/actionHandlers/index.js +1 -5
  379. package/esm/core/Table/actionHandlers/resizeHandler.js +11 -11
  380. package/esm/core/Table/actionHandlers/selectHandler.js +95 -122
  381. package/esm/core/Table/cells/DefaultCell.js +7 -42
  382. package/esm/core/Table/cells/EditableCell.js +41 -70
  383. package/esm/core/Table/columns/actionColumn.js +55 -85
  384. package/esm/core/Table/columns/expanderColumn.js +25 -39
  385. package/esm/core/Table/columns/selectionColumn.js +23 -51
  386. package/esm/core/Table/filters/BaseFilter.js +7 -15
  387. package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.js +42 -107
  388. package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.js +52 -110
  389. package/esm/core/Table/filters/FilterButtonBar.js +9 -28
  390. package/esm/core/Table/filters/FilterToggle.js +18 -51
  391. package/esm/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +28 -50
  392. package/esm/core/Table/filters/TextFilter/TextFilter.js +20 -32
  393. package/esm/core/Table/filters/customFilterFunctions.js +12 -14
  394. package/esm/core/Table/filters/defaultFilterFunctions.js +79 -84
  395. package/esm/core/Table/filters/tableFilters.js +25 -34
  396. package/esm/core/Table/hooks/useColumnDragAndDrop.js +81 -88
  397. package/esm/core/Table/hooks/useExpanderCell.js +20 -26
  398. package/esm/core/Table/hooks/useResizeColumns.js +287 -353
  399. package/esm/core/Table/hooks/useScrollToRow.js +34 -42
  400. package/esm/core/Table/hooks/useSelectionCell.js +6 -10
  401. package/esm/core/Table/hooks/useStickyColumns.js +59 -61
  402. package/esm/core/Table/hooks/useSubRowFiltering.js +83 -90
  403. package/esm/core/Table/hooks/useSubRowSelection.js +27 -28
  404. package/esm/core/Table/index.js +1 -5
  405. package/esm/core/Table/utils.js +38 -40
  406. package/esm/core/Tabs/Tabs.js +226 -401
  407. package/esm/core/Tag/Tag.js +8 -35
  408. package/esm/core/Tag/TagContainer.js +5 -17
  409. package/esm/core/Textarea/Textarea.js +1 -6
  410. package/esm/core/ThemeProvider/ThemeProvider.js +44 -101
  411. package/esm/core/Tile/Tile.js +218 -386
  412. package/esm/core/TimePicker/TimePicker.js +228 -448
  413. package/esm/core/Toast/Toast.js +99 -193
  414. package/esm/core/Toast/Toaster.js +69 -82
  415. package/esm/core/ToggleSwitch/ToggleSwitch.js +17 -60
  416. package/esm/core/Tooltip/Tooltip.js +86 -151
  417. package/esm/core/TransferList/TransferList.js +93 -157
  418. package/esm/core/Tree/Tree.js +122 -196
  419. package/esm/core/Tree/TreeContext.js +5 -5
  420. package/esm/core/Tree/TreeNode.js +96 -195
  421. package/esm/core/Tree/TreeNodeExpander.js +5 -16
  422. package/esm/core/Typography/Blockquote.js +4 -12
  423. package/esm/core/Typography/Kbd.js +15 -24
  424. package/esm/core/Typography/Text.js +7 -20
  425. package/esm/core/VisuallyHidden/VisuallyHidden.js +2 -8
  426. package/esm/core/utils/color/ColorValue.js +449 -524
  427. package/esm/core/utils/components/AutoclearingHiddenLiveRegion.js +7 -11
  428. package/esm/core/utils/components/ButtonBase.js +13 -31
  429. package/esm/core/utils/components/FocusTrap.js +32 -41
  430. package/esm/core/utils/components/InputContainer.js +11 -50
  431. package/esm/core/utils/components/InputFlexContainer.js +2 -15
  432. package/esm/core/utils/components/MiddleTextTruncation.js +17 -27
  433. package/esm/core/utils/components/Portal.js +12 -12
  434. package/esm/core/utils/components/Resizer.js +191 -249
  435. package/esm/core/utils/components/VirtualScroll.js +218 -297
  436. package/esm/core/utils/components/WithCSSTransition.js +26 -43
  437. package/esm/core/utils/functions/colors.js +19 -19
  438. package/esm/core/utils/functions/date.js +8 -8
  439. package/esm/core/utils/functions/dev.js +12 -11
  440. package/esm/core/utils/functions/dom.js +14 -17
  441. package/esm/core/utils/functions/focusable.js +15 -24
  442. package/esm/core/utils/functions/import.js +2 -4
  443. package/esm/core/utils/functions/numbers.js +7 -7
  444. package/esm/core/utils/functions/polymorphic.js +23 -32
  445. package/esm/core/utils/functions/react.js +19 -21
  446. package/esm/core/utils/functions/supports.js +1 -2
  447. package/esm/core/utils/hooks/useContainerWidth.js +13 -16
  448. package/esm/core/utils/hooks/useControlledState.js +8 -17
  449. package/esm/core/utils/hooks/useDragAndDrop.js +80 -99
  450. package/esm/core/utils/hooks/useEventListener.js +18 -18
  451. package/esm/core/utils/hooks/useGlobals.js +21 -27
  452. package/esm/core/utils/hooks/useId.js +3 -4
  453. package/esm/core/utils/hooks/useIntersection.js +19 -25
  454. package/esm/core/utils/hooks/useIsClient.js +5 -5
  455. package/esm/core/utils/hooks/useIsomorphicLayoutEffect.js +1 -2
  456. package/esm/core/utils/hooks/useLatestRef.js +5 -5
  457. package/esm/core/utils/hooks/useMediaQuery.js +25 -23
  458. package/esm/core/utils/hooks/useMergedRefs.js +12 -11
  459. package/esm/core/utils/hooks/useOverflow.js +51 -63
  460. package/esm/core/utils/hooks/useResizeObserver.js +12 -17
  461. package/esm/core/utils/hooks/useSafeContext.js +5 -5
  462. package/esm/core/utils/icons/StatusIconMap.js +4 -8
  463. package/esm/core/utils/icons/SvgCalendar.js +2 -7
  464. package/esm/core/utils/icons/SvgCaretDownSmall.js +2 -7
  465. package/esm/core/utils/icons/SvgCaretRightSmall.js +2 -7
  466. package/esm/core/utils/icons/SvgCaretUpSmall.js +2 -7
  467. package/esm/core/utils/icons/SvgCheckmark.js +2 -5
  468. package/esm/core/utils/icons/SvgCheckmarkSmall.js +2 -7
  469. package/esm/core/utils/icons/SvgChevronLeft.js +2 -7
  470. package/esm/core/utils/icons/SvgChevronLeftDouble.js +2 -7
  471. package/esm/core/utils/icons/SvgChevronRight.js +2 -7
  472. package/esm/core/utils/icons/SvgChevronRightDouble.js +2 -7
  473. package/esm/core/utils/icons/SvgClose.js +2 -7
  474. package/esm/core/utils/icons/SvgCloseSmall.js +2 -7
  475. package/esm/core/utils/icons/SvgColumnManager.js +2 -7
  476. package/esm/core/utils/icons/SvgDocument.js +2 -5
  477. package/esm/core/utils/icons/SvgFilter.js +2 -5
  478. package/esm/core/utils/icons/SvgFilterHollow.js +2 -7
  479. package/esm/core/utils/icons/SvgImportantSmall.js +2 -7
  480. package/esm/core/utils/icons/SvgInfoCircular.js +2 -7
  481. package/esm/core/utils/icons/SvgMore.js +2 -7
  482. package/esm/core/utils/icons/SvgMoreVertical.js +2 -7
  483. package/esm/core/utils/icons/SvgNew.js +2 -7
  484. package/esm/core/utils/icons/SvgSearch.js +2 -7
  485. package/esm/core/utils/icons/SvgSmileyHappy.js +2 -7
  486. package/esm/core/utils/icons/SvgSortDown.js +2 -7
  487. package/esm/core/utils/icons/SvgSortUp.js +2 -7
  488. package/esm/core/utils/icons/SvgStatusError.js +2 -7
  489. package/esm/core/utils/icons/SvgStatusSuccess.js +2 -7
  490. package/esm/core/utils/icons/SvgStatusWarning.js +2 -7
  491. package/esm/core/utils/icons/SvgSwap.js +2 -7
  492. package/esm/core/utils/icons/SvgUpload.js +2 -7
  493. package/esm/index.js +3 -21
  494. package/esm/styles.js +414 -425
  495. package/package.json +2 -2
  496. package/styles.css +6 -6
@@ -1,398 +1,332 @@
1
1
  import { actions, makePropGetter, useGetLatest } from 'react-table';
2
2
  export const useResizeColumns = (ownerDocument) => (hooks) => {
3
- hooks.getResizerProps = [defaultGetResizerProps(ownerDocument)];
4
- hooks.stateReducers.push(reducer);
5
- hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions);
3
+ hooks.getResizerProps = [defaultGetResizerProps(ownerDocument)];
4
+ hooks.stateReducers.push(reducer);
5
+ hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions);
6
6
  };
7
7
  const isTouchEvent = (event) => {
8
- return event.type === 'touchstart';
8
+ return event.type === 'touchstart';
9
9
  };
10
- const defaultGetResizerProps =
11
- (ownerDocument) =>
12
- (props, { instance, header, nextHeader }) => {
10
+ const defaultGetResizerProps = (ownerDocument) => (props, { instance, header, nextHeader, }) => {
13
11
  const { dispatch } = instance;
14
12
  const onResizeStart = (e, header) => {
15
- // lets not respond to multiple touches (e.g. 2 or 3 fingers)
16
- if (isTouchEvent(e) && e.touches && e.touches.length > 1) {
17
- return;
18
- }
19
- const headerIdWidths = getLeafHeaders(header).map((d) => [
20
- d.id,
21
- getHeaderWidth(d),
22
- ]);
23
- const nextHeaderIdWidths = nextHeader
24
- ? getLeafHeaders(nextHeader).map((d) => [d.id, getHeaderWidth(d)])
25
- : [];
26
- const clientX = isTouchEvent(e)
27
- ? Math.round(e.touches[0].clientX)
28
- : e.clientX;
29
- const dispatchMove = (clientXPos) =>
30
- dispatch({ type: actions.columnResizing, clientX: clientXPos });
31
- const dispatchEnd = () =>
13
+ // lets not respond to multiple touches (e.g. 2 or 3 fingers)
14
+ if (isTouchEvent(e) && e.touches && e.touches.length > 1) {
15
+ return;
16
+ }
17
+ const headerIdWidths = getLeafHeaders(header).map((d) => [
18
+ d.id,
19
+ getHeaderWidth(d),
20
+ ]);
21
+ const nextHeaderIdWidths = nextHeader
22
+ ? getLeafHeaders(nextHeader).map((d) => [d.id, getHeaderWidth(d)])
23
+ : [];
24
+ const clientX = isTouchEvent(e)
25
+ ? Math.round(e.touches[0].clientX)
26
+ : e.clientX;
27
+ const dispatchMove = (clientXPos) => dispatch({ type: actions.columnResizing, clientX: clientXPos });
28
+ const dispatchEnd = () => dispatch({
29
+ type: actions.columnDoneResizing,
30
+ });
31
+ const handlersAndEvents = {
32
+ mouse: {
33
+ moveEvent: 'mousemove',
34
+ moveHandler: (e) => dispatchMove(e.clientX),
35
+ upEvent: 'mouseup',
36
+ upHandler: () => {
37
+ ownerDocument.current?.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler);
38
+ ownerDocument.current?.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler);
39
+ ownerDocument.current?.removeEventListener('mouseleave', handlersAndEvents.mouse.upHandler);
40
+ dispatchEnd();
41
+ },
42
+ },
43
+ touch: {
44
+ moveEvent: 'touchmove',
45
+ moveHandler: (e) => {
46
+ if (e.cancelable) {
47
+ e.preventDefault();
48
+ e.stopPropagation();
49
+ }
50
+ dispatchMove(e.touches[0].clientX);
51
+ },
52
+ upEvent: 'touchend',
53
+ upHandler: () => {
54
+ ownerDocument.current?.removeEventListener(handlersAndEvents.touch.moveEvent, handlersAndEvents.touch.moveHandler);
55
+ ownerDocument.current?.removeEventListener(handlersAndEvents.touch.upEvent, handlersAndEvents.touch.moveHandler);
56
+ dispatchEnd();
57
+ },
58
+ },
59
+ };
60
+ const events = isTouchEvent(e)
61
+ ? handlersAndEvents.touch
62
+ : handlersAndEvents.mouse;
63
+ const passiveIfSupported = passiveEventSupported()
64
+ ? { passive: false }
65
+ : false;
66
+ ownerDocument.current?.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
67
+ ownerDocument.current?.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
68
+ if (!isTouchEvent(e)) {
69
+ ownerDocument.current?.addEventListener('mouseleave', handlersAndEvents.mouse.upHandler, passiveIfSupported);
70
+ }
32
71
  dispatch({
33
- type: actions.columnDoneResizing,
72
+ type: actions.columnStartResizing,
73
+ columnId: header.id,
74
+ columnWidth: getHeaderWidth(header),
75
+ nextColumnWidth: getHeaderWidth(nextHeader),
76
+ headerIdWidths,
77
+ nextHeaderIdWidths,
78
+ clientX,
34
79
  });
35
- const handlersAndEvents = {
36
- mouse: {
37
- moveEvent: 'mousemove',
38
- moveHandler: (e) => dispatchMove(e.clientX),
39
- upEvent: 'mouseup',
40
- upHandler: () => {
41
- ownerDocument.current?.removeEventListener(
42
- 'mousemove',
43
- handlersAndEvents.mouse.moveHandler,
44
- );
45
- ownerDocument.current?.removeEventListener(
46
- 'mouseup',
47
- handlersAndEvents.mouse.upHandler,
48
- );
49
- ownerDocument.current?.removeEventListener(
50
- 'mouseleave',
51
- handlersAndEvents.mouse.upHandler,
52
- );
53
- dispatchEnd();
54
- },
55
- },
56
- touch: {
57
- moveEvent: 'touchmove',
58
- moveHandler: (e) => {
59
- if (e.cancelable) {
60
- e.preventDefault();
61
- e.stopPropagation();
62
- }
63
- dispatchMove(e.touches[0].clientX);
64
- },
65
- upEvent: 'touchend',
66
- upHandler: () => {
67
- ownerDocument.current?.removeEventListener(
68
- handlersAndEvents.touch.moveEvent,
69
- handlersAndEvents.touch.moveHandler,
70
- );
71
- ownerDocument.current?.removeEventListener(
72
- handlersAndEvents.touch.upEvent,
73
- handlersAndEvents.touch.moveHandler,
74
- );
75
- dispatchEnd();
76
- },
77
- },
78
- };
79
- const events = isTouchEvent(e)
80
- ? handlersAndEvents.touch
81
- : handlersAndEvents.mouse;
82
- const passiveIfSupported = passiveEventSupported()
83
- ? { passive: false }
84
- : false;
85
- ownerDocument.current?.addEventListener(
86
- events.moveEvent,
87
- events.moveHandler,
88
- passiveIfSupported,
89
- );
90
- ownerDocument.current?.addEventListener(
91
- events.upEvent,
92
- events.upHandler,
93
- passiveIfSupported,
94
- );
95
- if (!isTouchEvent(e)) {
96
- ownerDocument.current?.addEventListener(
97
- 'mouseleave',
98
- handlersAndEvents.mouse.upHandler,
99
- passiveIfSupported,
100
- );
101
- }
102
- dispatch({
103
- type: actions.columnStartResizing,
104
- columnId: header.id,
105
- columnWidth: getHeaderWidth(header),
106
- nextColumnWidth: getHeaderWidth(nextHeader),
107
- headerIdWidths,
108
- nextHeaderIdWidths,
109
- clientX,
110
- });
111
80
  };
112
81
  return [
113
- props,
114
- {
115
- onClick: (e) => {
116
- // Prevents from triggering sort
117
- e.stopPropagation();
118
- },
119
- onMouseDown: (e) => {
120
- e.persist();
121
- // Prevents from triggering drag'n'drop
122
- e.preventDefault();
123
- // Prevents from triggering sort
124
- e.stopPropagation();
125
- onResizeStart(e, header);
82
+ props,
83
+ {
84
+ onClick: (e) => {
85
+ // Prevents from triggering sort
86
+ e.stopPropagation();
87
+ },
88
+ onMouseDown: (e) => {
89
+ e.persist();
90
+ // Prevents from triggering drag'n'drop
91
+ e.preventDefault();
92
+ // Prevents from triggering sort
93
+ e.stopPropagation();
94
+ onResizeStart(e, header);
95
+ },
96
+ onTouchStart: (e) => {
97
+ e.persist();
98
+ // Prevents from triggering drag'n'drop
99
+ e.preventDefault();
100
+ onResizeStart(e, header);
101
+ },
102
+ style: {
103
+ cursor: 'col-resize',
104
+ },
105
+ draggable: false,
106
+ role: 'separator',
126
107
  },
127
- onTouchStart: (e) => {
128
- e.persist();
129
- // Prevents from triggering drag'n'drop
130
- e.preventDefault();
131
- onResizeStart(e, header);
132
- },
133
- style: {
134
- cursor: 'col-resize',
135
- },
136
- draggable: false,
137
- role: 'separator',
138
- },
139
108
  ];
140
- };
109
+ };
141
110
  useResizeColumns.pluginName = 'useResizeColumns';
142
111
  const reducer = (newState, action, previousState, instance) => {
143
- if (action.type === actions.init) {
144
- return {
145
- ...newState,
146
- columnResizing: {
147
- columnWidths: {},
148
- },
149
- };
150
- }
151
- if (action.type === actions.resetResize) {
152
- return {
153
- ...newState,
154
- columnResizing: {
155
- columnWidths: {},
156
- },
157
- };
158
- }
159
- if (action.type === actions.columnStartResizing) {
160
- const {
161
- clientX,
162
- columnId,
163
- columnWidth,
164
- nextColumnWidth,
165
- headerIdWidths,
166
- nextHeaderIdWidths,
167
- } = action;
168
- return {
169
- ...newState,
170
- columnResizing: {
171
- ...newState.columnResizing,
172
- startX: clientX,
173
- columnWidth,
174
- nextColumnWidth,
175
- headerIdWidths,
176
- nextHeaderIdWidths,
177
- isResizingColumn: columnId,
178
- },
179
- };
180
- }
181
- if (action.type === actions.columnResizing) {
182
- const { clientX } = action;
183
- const {
184
- startX = 0,
185
- columnWidth = 1,
186
- nextColumnWidth = 1,
187
- headerIdWidths = [],
188
- nextHeaderIdWidths = [],
189
- } = newState.columnResizing;
190
- if (!instance) {
191
- return newState;
112
+ if (action.type === actions.init) {
113
+ return {
114
+ ...newState,
115
+ columnResizing: {
116
+ columnWidths: {},
117
+ },
118
+ };
192
119
  }
193
- const deltaX = clientX - startX;
194
- const newColumnWidths = getColumnWidths(
195
- headerIdWidths,
196
- deltaX / columnWidth,
197
- );
198
- const isTableWidthDecreasing =
199
- calculateTableWidth(newColumnWidths, instance.flatHeaders) <
200
- instance.tableWidth;
201
- const newNextColumnWidths =
202
- instance?.columnResizeMode === 'fit' ||
203
- (instance?.columnResizeMode === 'expand' && isTableWidthDecreasing)
204
- ? getColumnWidths(nextHeaderIdWidths, -deltaX / nextColumnWidth)
205
- : {};
206
- if (
207
- !isNewColumnWidthsValid(newColumnWidths, instance.flatHeaders) ||
208
- !isNewColumnWidthsValid(newNextColumnWidths, instance.flatHeaders) ||
209
- !isNewTableWidthValid(
210
- { ...newColumnWidths, ...newNextColumnWidths },
211
- instance,
212
- )
213
- ) {
214
- return newState;
120
+ if (action.type === actions.resetResize) {
121
+ return {
122
+ ...newState,
123
+ columnResizing: {
124
+ columnWidths: {},
125
+ },
126
+ };
215
127
  }
216
- // Setting `width` here because it might take several rerenders until actual column width is set.
217
- // Also setting after the actual resize happened.
218
- instance?.flatHeaders.forEach((h) => {
219
- if (!h.width) {
220
- h.width = h.resizeWidth;
221
- }
222
- });
223
- return {
224
- ...newState,
225
- columnResizing: {
226
- ...newState.columnResizing,
227
- columnWidths: {
228
- ...newState.columnResizing.columnWidths,
229
- ...newColumnWidths,
230
- ...newNextColumnWidths,
231
- },
232
- },
233
- };
234
- }
235
- if (action.type === actions.columnDoneResizing) {
236
- return {
237
- ...newState,
238
- columnResizing: {
239
- ...newState.columnResizing,
240
- startX: undefined,
241
- isResizingColumn: undefined,
242
- },
243
- };
244
- }
245
- return newState;
128
+ if (action.type === actions.columnStartResizing) {
129
+ const { clientX, columnId, columnWidth, nextColumnWidth, headerIdWidths, nextHeaderIdWidths, } = action;
130
+ return {
131
+ ...newState,
132
+ columnResizing: {
133
+ ...newState.columnResizing,
134
+ startX: clientX,
135
+ columnWidth,
136
+ nextColumnWidth,
137
+ headerIdWidths,
138
+ nextHeaderIdWidths,
139
+ isResizingColumn: columnId,
140
+ },
141
+ };
142
+ }
143
+ if (action.type === actions.columnResizing) {
144
+ const { clientX } = action;
145
+ const { startX = 0, columnWidth = 1, nextColumnWidth = 1, headerIdWidths = [], nextHeaderIdWidths = [], } = newState.columnResizing;
146
+ if (!instance) {
147
+ return newState;
148
+ }
149
+ const deltaX = clientX - startX;
150
+ const newColumnWidths = getColumnWidths(headerIdWidths, deltaX / columnWidth);
151
+ const isTableWidthDecreasing = calculateTableWidth(newColumnWidths, instance.flatHeaders) <
152
+ instance.tableWidth;
153
+ const newNextColumnWidths = instance?.columnResizeMode === 'fit' ||
154
+ (instance?.columnResizeMode === 'expand' && isTableWidthDecreasing)
155
+ ? getColumnWidths(nextHeaderIdWidths, -deltaX / nextColumnWidth)
156
+ : {};
157
+ if (!isNewColumnWidthsValid(newColumnWidths, instance.flatHeaders) ||
158
+ !isNewColumnWidthsValid(newNextColumnWidths, instance.flatHeaders) ||
159
+ !isNewTableWidthValid({ ...newColumnWidths, ...newNextColumnWidths }, instance)) {
160
+ return newState;
161
+ }
162
+ // Setting `width` here because it might take several rerenders until actual column width is set.
163
+ // Also setting after the actual resize happened.
164
+ instance?.flatHeaders.forEach((h) => {
165
+ if (!h.width) {
166
+ h.width = h.resizeWidth;
167
+ }
168
+ });
169
+ return {
170
+ ...newState,
171
+ columnResizing: {
172
+ ...newState.columnResizing,
173
+ columnWidths: {
174
+ ...newState.columnResizing.columnWidths,
175
+ ...newColumnWidths,
176
+ ...newNextColumnWidths,
177
+ },
178
+ },
179
+ };
180
+ }
181
+ if (action.type === actions.columnDoneResizing) {
182
+ return {
183
+ ...newState,
184
+ columnResizing: {
185
+ ...newState.columnResizing,
186
+ startX: undefined,
187
+ isResizingColumn: undefined,
188
+ },
189
+ };
190
+ }
191
+ return newState;
246
192
  };
247
193
  const getColumnWidths = (headerIdWidths, deltaPercentage) => {
248
- const columnWidths = {};
249
- headerIdWidths.forEach(([headerId, headerWidth]) => {
250
- columnWidths[headerId] = Math.max(
251
- headerWidth + headerWidth * deltaPercentage,
252
- 0,
253
- );
254
- });
255
- return columnWidths;
194
+ const columnWidths = {};
195
+ headerIdWidths.forEach(([headerId, headerWidth]) => {
196
+ columnWidths[headerId] = Math.max(headerWidth + headerWidth * deltaPercentage, 0);
197
+ });
198
+ return columnWidths;
256
199
  };
257
200
  const isNewColumnWidthsValid = (columnWidths, headers) => {
258
- // Prevents from going outside the column bounds
259
- if (Object.values(columnWidths).some((width) => width <= 1)) {
260
- return false;
261
- }
262
- for (const [headerId, width] of Object.entries(columnWidths)) {
263
- const header = headers?.find((h) => h.id === headerId);
264
- if (!header) {
265
- continue;
201
+ // Prevents from going outside the column bounds
202
+ if (Object.values(columnWidths).some((width) => width <= 1)) {
203
+ return false;
266
204
  }
267
- const minWidth = header.minWidth || 0;
268
- const maxWidth = header.maxWidth || Infinity;
269
- if (width < minWidth || width > maxWidth) {
270
- return false;
205
+ for (const [headerId, width] of Object.entries(columnWidths)) {
206
+ const header = headers?.find((h) => h.id === headerId);
207
+ if (!header) {
208
+ continue;
209
+ }
210
+ const minWidth = header.minWidth || 0;
211
+ const maxWidth = header.maxWidth || Infinity;
212
+ if (width < minWidth || width > maxWidth) {
213
+ return false;
214
+ }
271
215
  }
272
- }
273
- return true;
216
+ return true;
274
217
  };
275
218
  const isNewTableWidthValid = (columnWidths, instance) => {
276
- if (instance.columnResizeMode === 'fit') {
219
+ if (instance.columnResizeMode === 'fit') {
220
+ return true;
221
+ }
222
+ let newTableWidth = 0;
223
+ for (const header of instance.flatHeaders) {
224
+ newTableWidth += columnWidths[header.id]
225
+ ? columnWidths[header.id]
226
+ : getHeaderWidth(header);
227
+ }
228
+ // `tableWidth` is whole number therefore we need to round the `newTableWidth`
229
+ if (Math.round(newTableWidth) < instance.tableWidth) {
230
+ return false;
231
+ }
277
232
  return true;
278
- }
279
- let newTableWidth = 0;
280
- for (const header of instance.flatHeaders) {
281
- newTableWidth += columnWidths[header.id]
282
- ? columnWidths[header.id]
283
- : getHeaderWidth(header);
284
- }
285
- // `tableWidth` is whole number therefore we need to round the `newTableWidth`
286
- if (Math.round(newTableWidth) < instance.tableWidth) {
287
- return false;
288
- }
289
- return true;
290
233
  };
291
234
  const useInstanceBeforeDimensions = (instance) => {
292
- const {
293
- flatHeaders,
294
- getHooks,
295
- state: { columnResizing },
296
- columnResizeMode,
297
- } = instance;
298
- const getInstance = useGetLatest(instance);
299
- flatHeaders.forEach((header, index) => {
300
- const resizeWidth = columnResizing.columnWidths[header.id];
301
- header.width = resizeWidth || header.width || header.originalWidth;
302
- header.isResizing = columnResizing.isResizingColumn === header.id;
303
- const headerToResize =
304
- header.disableResizing && columnResizeMode === 'fit'
305
- ? getPreviousResizableHeader(header, instance)
306
- : header;
307
- // When `columnResizeMode` is `expand` and it is a last column,
308
- // then try to find some column on the left side to resize
309
- // when table width is decreasing.
310
- const nextResizableHeader =
311
- columnResizeMode === 'expand' && index === flatHeaders.length - 1
312
- ? getPreviousResizableHeader(header, instance)
313
- : getNextResizableHeader(header, instance);
314
- header.canResize =
315
- header.disableResizing != null ? !header.disableResizing : true;
316
- // Show resizer when header is resizable or when next header is resizable
317
- // and there is resizable columns on the left side of the resizer.
318
- if (columnResizeMode === 'fit') {
319
- header.isResizerVisible =
320
- (header.canResize && !!nextResizableHeader) ||
321
- (headerToResize && !!instance.flatHeaders[index + 1]?.canResize);
322
- // When resize mode is `expand` show resizer on the current resizable column.
323
- } else {
324
- header.isResizerVisible = header.canResize && !!headerToResize;
325
- }
326
- header.getResizerProps = makePropGetter(getHooks().getResizerProps, {
327
- instance: getInstance(),
328
- header: headerToResize,
329
- nextHeader: nextResizableHeader,
235
+ const { flatHeaders, getHooks, state: { columnResizing }, columnResizeMode, } = instance;
236
+ const getInstance = useGetLatest(instance);
237
+ flatHeaders.forEach((header, index) => {
238
+ const resizeWidth = columnResizing.columnWidths[header.id];
239
+ header.width = resizeWidth || header.width || header.originalWidth;
240
+ header.isResizing = columnResizing.isResizingColumn === header.id;
241
+ const headerToResize = header.disableResizing && columnResizeMode === 'fit'
242
+ ? getPreviousResizableHeader(header, instance)
243
+ : header;
244
+ // When `columnResizeMode` is `expand` and it is a last column,
245
+ // then try to find some column on the left side to resize
246
+ // when table width is decreasing.
247
+ const nextResizableHeader = columnResizeMode === 'expand' && index === flatHeaders.length - 1
248
+ ? getPreviousResizableHeader(header, instance)
249
+ : getNextResizableHeader(header, instance);
250
+ header.canResize =
251
+ header.disableResizing != null ? !header.disableResizing : true;
252
+ // Show resizer when header is resizable or when next header is resizable
253
+ // and there is resizable columns on the left side of the resizer.
254
+ if (columnResizeMode === 'fit') {
255
+ header.isResizerVisible =
256
+ (header.canResize && !!nextResizableHeader) ||
257
+ (headerToResize && !!instance.flatHeaders[index + 1]?.canResize);
258
+ // When resize mode is `expand` show resizer on the current resizable column.
259
+ }
260
+ else {
261
+ header.isResizerVisible = header.canResize && !!headerToResize;
262
+ }
263
+ header.getResizerProps = makePropGetter(getHooks().getResizerProps, {
264
+ instance: getInstance(),
265
+ header: headerToResize,
266
+ nextHeader: nextResizableHeader,
267
+ });
330
268
  });
331
- });
332
269
  };
333
270
  const getPreviousResizableHeader = (headerColumn, instance) => {
334
- const headersList = (
335
- headerColumn.parent?.columns || instance.flatHeaders
336
- ).filter(({ isVisible }) => isVisible);
337
- const headerIndex = headersList.findIndex((h) => h.id === headerColumn.id);
338
- return [...headersList]
339
- .slice(0, headerIndex)
340
- .reverse()
341
- .find((h) => !h.disableResizing);
271
+ const headersList = (headerColumn.parent?.columns || instance.flatHeaders).filter(({ isVisible }) => isVisible);
272
+ const headerIndex = headersList.findIndex((h) => h.id === headerColumn.id);
273
+ return [...headersList]
274
+ .slice(0, headerIndex)
275
+ .reverse()
276
+ .find((h) => !h.disableResizing);
342
277
  };
343
278
  const getNextResizableHeader = (headerColumn, instance) => {
344
- const headersList = (
345
- headerColumn.parent?.columns || instance.flatHeaders
346
- ).filter(({ isVisible }) => isVisible);
347
- const headerIndex = headersList.findIndex((h) => h.id === headerColumn.id);
348
- return [...headersList]
349
- .slice(headerIndex + 1)
350
- .find((h) => !h.disableResizing);
279
+ const headersList = (headerColumn.parent?.columns || instance.flatHeaders).filter(({ isVisible }) => isVisible);
280
+ const headerIndex = headersList.findIndex((h) => h.id === headerColumn.id);
281
+ return [...headersList]
282
+ .slice(headerIndex + 1)
283
+ .find((h) => !h.disableResizing);
351
284
  };
352
285
  function getLeafHeaders(header) {
353
- const leafHeaders = [];
354
- const recurseHeader = (header) => {
355
- if (header.columns && header.columns.length) {
356
- header.columns.map(recurseHeader);
357
- }
358
- leafHeaders.push(header);
359
- };
360
- recurseHeader(header);
361
- return leafHeaders;
286
+ const leafHeaders = [];
287
+ const recurseHeader = (header) => {
288
+ if (header.columns && header.columns.length) {
289
+ header.columns.map(recurseHeader);
290
+ }
291
+ leafHeaders.push(header);
292
+ };
293
+ recurseHeader(header);
294
+ return leafHeaders;
362
295
  }
363
296
  const getHeaderWidth = (header) => {
364
- if (!header) {
365
- return 0;
366
- }
367
- return Number(header.width || header.resizeWidth || 0);
297
+ if (!header) {
298
+ return 0;
299
+ }
300
+ return Number(header.width || header.resizeWidth || 0);
368
301
  };
369
302
  const calculateTableWidth = (columnWidths, headers) => {
370
- let newTableWidth = 0;
371
- for (const header of headers) {
372
- newTableWidth += columnWidths[header.id]
373
- ? columnWidths[header.id]
374
- : getHeaderWidth(header);
375
- }
376
- return newTableWidth;
303
+ let newTableWidth = 0;
304
+ for (const header of headers) {
305
+ newTableWidth += columnWidths[header.id]
306
+ ? columnWidths[header.id]
307
+ : getHeaderWidth(header);
308
+ }
309
+ return newTableWidth;
377
310
  };
378
311
  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#safely_detecting_option_support
379
312
  let passiveSupported = null;
380
313
  const passiveEventSupported = () => {
381
- // memoize support to avoid adding multiple test events
382
- if (passiveSupported != null) {
314
+ // memoize support to avoid adding multiple test events
315
+ if (passiveSupported != null) {
316
+ return passiveSupported;
317
+ }
318
+ try {
319
+ const options = {
320
+ once: true,
321
+ get passive() {
322
+ passiveSupported = true;
323
+ return false;
324
+ },
325
+ };
326
+ window.addEventListener('test', () => { }, options);
327
+ }
328
+ catch {
329
+ passiveSupported = false;
330
+ }
383
331
  return passiveSupported;
384
- }
385
- try {
386
- const options = {
387
- once: true,
388
- get passive() {
389
- passiveSupported = true;
390
- return false;
391
- },
392
- };
393
- window.addEventListener('test', () => {}, options);
394
- } catch {
395
- passiveSupported = false;
396
- }
397
- return passiveSupported;
398
332
  };