@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
@@ -3,21 +3,21 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  export const SoftBackgrounds = {
6
- skyblue: 'var(--iui-color-background-skyblue)',
7
- celery: 'var(--iui-color-background-celery)',
8
- froly: 'var(--iui-color-background-froly)',
9
- steelblue: 'var(--iui-color-background-steelblue)',
10
- sunglow: 'var(--iui-color-background-sunglow)',
11
- seabuckthorn: 'var(--iui-color-background-seabuckthorn)',
12
- montecarlo: 'var(--iui-color-background-montecarlo)',
13
- poloblue: 'var(--iui-color-background-poloblue)',
14
- bouquet: 'var(--iui-color-background-bouquet)',
15
- ash: 'var(--iui-color-background-ash)',
16
- oak: 'var(--iui-color-background-oak)',
6
+ skyblue: 'var(--iui-color-background-skyblue)',
7
+ celery: 'var(--iui-color-background-celery)',
8
+ froly: 'var(--iui-color-background-froly)',
9
+ steelblue: 'var(--iui-color-background-steelblue)',
10
+ sunglow: 'var(--iui-color-background-sunglow)',
11
+ seabuckthorn: 'var(--iui-color-background-seabuckthorn)',
12
+ montecarlo: 'var(--iui-color-background-montecarlo)',
13
+ poloblue: 'var(--iui-color-background-poloblue)',
14
+ bouquet: 'var(--iui-color-background-bouquet)',
15
+ ash: 'var(--iui-color-background-ash)',
16
+ oak: 'var(--iui-color-background-oak)',
17
17
  };
18
18
  /** Returns true if a string value is one of the SoftBackgrounds keys */
19
19
  export const isSoftBackground = (value) => {
20
- return Object.keys(SoftBackgrounds).includes(value);
20
+ return Object.keys(SoftBackgrounds).includes(value);
21
21
  };
22
22
  const USER_COLORS = Object.values(SoftBackgrounds);
23
23
  /**
@@ -25,11 +25,11 @@ const USER_COLORS = Object.values(SoftBackgrounds);
25
25
  * Recommended to use for `backgroundColor` in `Avatar` component.
26
26
  */
27
27
  export const getUserColor = (emailOrName) => {
28
- const normalizedString = emailOrName.trim().toLowerCase();
29
- let hash = 0;
30
- for (let i = 0; i < normalizedString.length; i++) {
31
- const charCode = normalizedString.charCodeAt(i);
32
- hash = (hash + charCode) % USER_COLORS.length;
33
- }
34
- return USER_COLORS[hash];
28
+ const normalizedString = emailOrName.trim().toLowerCase();
29
+ let hash = 0;
30
+ for (let i = 0; i < normalizedString.length; i++) {
31
+ const charCode = normalizedString.charCodeAt(i);
32
+ hash = (hash + charCode) % USER_COLORS.length;
33
+ }
34
+ return USER_COLORS[hash];
35
35
  };
@@ -6,12 +6,12 @@
6
6
  * Return true if the first date is earlier than the second date
7
7
  */
8
8
  export const isBefore = (beforeDate, afterDate) => {
9
- if (!beforeDate || !afterDate) {
10
- return false;
11
- }
12
- const firstDate = new Date(beforeDate);
13
- const secondDate = new Date(afterDate);
14
- firstDate && firstDate.setHours(0, 0, 0, 0);
15
- secondDate && secondDate.setHours(0, 0, 0, 0);
16
- return firstDate < secondDate;
9
+ if (!beforeDate || !afterDate) {
10
+ return false;
11
+ }
12
+ const firstDate = new Date(beforeDate);
13
+ const secondDate = new Date(afterDate);
14
+ firstDate && firstDate.setHours(0, 0, 0, 0);
15
+ secondDate && secondDate.setHours(0, 0, 0, 0);
16
+ return firstDate < secondDate;
17
17
  };
@@ -6,8 +6,9 @@ const isJest = typeof jest !== 'undefined';
6
6
  let isDev = false;
7
7
  // wrapping in try-catch because process might be undefined
8
8
  try {
9
- isDev = process.env.NODE_ENV !== 'production' && !isJest;
10
- } catch {}
9
+ isDev = process.env.NODE_ENV !== 'production' && !isJest;
10
+ }
11
+ catch { }
11
12
  /**
12
13
  * Logs message one time only in dev environments.
13
14
  *
@@ -16,14 +17,14 @@ try {
16
17
  * logWarningInDev("please don't use this")
17
18
  */
18
19
  const createWarningLogger = !isDev
19
- ? () => () => {}
20
- : () => {
21
- let logged = false;
22
- return (message) => {
23
- if (!logged) {
24
- console.warn(message);
25
- logged = true;
26
- }
27
- };
20
+ ? () => () => { }
21
+ : () => {
22
+ let logged = false;
23
+ return (message) => {
24
+ if (!logged) {
25
+ console.warn(message);
26
+ logged = true;
27
+ }
28
+ };
28
29
  };
29
30
  export { isJest, isDev, createWarningLogger };
@@ -7,40 +7,37 @@
7
7
  * Used to support SSR/SSG applications.
8
8
  */
9
9
  export const getDocument = () => {
10
- return typeof document === 'undefined' ? undefined : document;
10
+ return typeof document === 'undefined' ? undefined : document;
11
11
  };
12
12
  /**
13
13
  * Get window if it is defined.
14
14
  * Used to support SSR/SSG applications.
15
15
  */
16
16
  export const getWindow = () => {
17
- return typeof window === 'undefined' ? undefined : window;
17
+ return typeof window === 'undefined' ? undefined : window;
18
18
  };
19
19
  /**
20
20
  * Merges multiple event handlers into one, while making sure that
21
21
  * `defaultPrevented` is respected for each callback.
22
22
  */
23
- export const mergeEventHandlers =
24
- (...callbacks) =>
25
- (event) => {
23
+ export const mergeEventHandlers = (...callbacks) => (event) => {
26
24
  for (const cb of callbacks) {
27
- cb?.(event);
28
- if (event?.defaultPrevented) {
29
- return;
30
- }
25
+ cb?.(event);
26
+ if (event?.defaultPrevented) {
27
+ return;
28
+ }
31
29
  }
32
- };
30
+ };
33
31
  /**
34
32
  * Returns translate values as an array of a given element.
35
33
  * @param element HTML element you want to get translate value of
36
34
  * @returns Translate values in pixels in an array `[translateX, translateY]`
37
35
  */
38
36
  export const getTranslateValues = (element) => {
39
- if (!element) {
40
- return [];
41
- }
42
- const transformValue =
43
- getComputedStyle(element).getPropertyValue('transform');
44
- const matrix = new DOMMatrix(transformValue);
45
- return [matrix.m41, matrix.m42];
37
+ if (!element) {
38
+ return [];
39
+ }
40
+ const transformValue = getComputedStyle(element).getPropertyValue('transform');
41
+ const matrix = new DOMMatrix(transformValue);
42
+ return [matrix.m41, matrix.m42];
46
43
  };
@@ -2,37 +2,28 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- const tabbableElementsSelector =
6
- 'a[href], button, input, textarea, select, details, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])';
5
+ const tabbableElementsSelector = 'a[href], button, input, textarea, select, details, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])';
7
6
  /**
8
7
  * Return array of tabbable elements in the container.
9
8
  */
10
9
  export const getTabbableElements = (container) => {
11
- if (!container) {
12
- return [];
13
- }
14
- const elements = container.querySelectorAll(tabbableElementsSelector);
15
- return Array.from(elements).filter(
16
- (el) =>
17
- !el.hasAttribute('disabled') &&
18
- !el.classList.contains('iui-disabled') &&
19
- el.getAttribute('aria-disabled') !== 'true',
20
- );
10
+ if (!container) {
11
+ return [];
12
+ }
13
+ const elements = container.querySelectorAll(tabbableElementsSelector);
14
+ return Array.from(elements).filter((el) => !el.hasAttribute('disabled') &&
15
+ !el.classList.contains('iui-disabled') &&
16
+ el.getAttribute('aria-disabled') !== 'true');
21
17
  };
22
18
  /**
23
19
  * Return array of focusable elements in the container.
24
20
  */
25
21
  export const getFocusableElements = (container) => {
26
- if (!container) {
27
- return [];
28
- }
29
- const elements = container.querySelectorAll(
30
- `${tabbableElementsSelector}, [tabindex="-1"]`,
31
- );
32
- return Array.from(elements).filter(
33
- (el) =>
34
- !el.hasAttribute('disabled') &&
35
- !el.classList.contains('iui-disabled') &&
36
- el.getAttribute('aria-disabled') !== 'true',
37
- );
22
+ if (!container) {
23
+ return [];
24
+ }
25
+ const elements = container.querySelectorAll(`${tabbableElementsSelector}, [tabindex="-1"]`);
26
+ return Array.from(elements).filter((el) => !el.hasAttribute('disabled') &&
27
+ !el.classList.contains('iui-disabled') &&
28
+ el.getAttribute('aria-disabled') !== 'true');
38
29
  };
@@ -7,8 +7,6 @@
7
7
  * 1. typescript trying to transpile dynamic import in CJS environment (https://github.com/microsoft/TypeScript/issues/43329)
8
8
  * 2. jest/node causing segfault when encountering dynamic import (https://github.com/nodejs/node/issues/35889)
9
9
  */
10
- export const dynamicImport =
11
- typeof jest === undefined
10
+ export const dynamicImport = typeof jest === undefined
12
11
  ? new Function('specifier', 'return import(specifier)')
13
- : (specifier) =>
14
- import(/* webpackIgnore: true */ /* @vite-ignore */ specifier);
12
+ : (specifier) => import(/* webpackIgnore: true */ /* @vite-ignore */ specifier);
@@ -6,16 +6,16 @@
6
6
  * Return input value bounded by specified range.
7
7
  */
8
8
  export const getBoundedValue = (val, min, max) => {
9
- return Math.min(max, Math.max(min, val));
9
+ return Math.min(max, Math.max(min, val));
10
10
  };
11
11
  /**
12
12
  * Returns a random value of a given length containing `A-Za-z0-9_-` symbols.
13
13
  */
14
14
  export const getRandomValue = (length = 21) => {
15
- const alphabet = `_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`;
16
- let id = '';
17
- for (let i = 0; i < length; i++) {
18
- id += alphabet[(Math.random() * 64) | 0];
19
- }
20
- return id;
15
+ const alphabet = `_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`;
16
+ let id = '';
17
+ for (let i = 0; i < length; i++) {
18
+ id += alphabet[(Math.random() * 64) | 0];
19
+ }
20
+ return id;
21
21
  };
@@ -7,22 +7,15 @@ import cx from 'classnames';
7
7
  import { useGlobals } from '../hooks/useGlobals.js';
8
8
  import styles from '../../../styles.js';
9
9
  const _base = (defaultElement) => {
10
- return (className, attrs) => {
11
- const Comp = React.forwardRef(({ as = defaultElement, ...props }, ref) => {
12
- const Element = as || 'div'; // eslint-disable-line
13
- useGlobals();
14
- return React.createElement(Element, {
15
- ref: ref,
16
- ...attrs,
17
- ...props,
18
- className: getScopedClassName(
19
- cx(className, attrs?.className, props.className),
20
- ),
21
- });
22
- });
23
- Comp.displayName = getDisplayNameFromClass(className);
24
- return Comp;
25
- };
10
+ return (className, attrs) => {
11
+ const Comp = React.forwardRef(({ as = defaultElement, ...props }, ref) => {
12
+ const Element = as || 'div'; // eslint-disable-line
13
+ useGlobals();
14
+ return (React.createElement(Element, { ref: ref, ...attrs, ...props, className: getScopedClassName(cx(className, attrs?.className, props.className)) }));
15
+ });
16
+ Comp.displayName = getDisplayNameFromClass(className);
17
+ return Comp;
18
+ };
26
19
  };
27
20
  /**
28
21
  * Utility to create a type-safe polymorphic component with a simple class.
@@ -44,26 +37,24 @@ const _base = (defaultElement) => {
44
37
  * @private
45
38
  */
46
39
  export const polymorphic = new Proxy(_base('div'), {
47
- get: (target, prop) => {
48
- if (typeof prop === 'string') {
49
- // eslint-disable-next-line -- string is as far as we can narrow it down
50
- // @ts-ignore
51
- return _base(prop);
52
- }
53
- return Reflect.get(target, prop);
54
- },
40
+ get: (target, prop) => {
41
+ if (typeof prop === 'string') {
42
+ // eslint-disable-next-line -- string is as far as we can narrow it down
43
+ // @ts-ignore
44
+ return _base(prop);
45
+ }
46
+ return Reflect.get(target, prop);
47
+ },
55
48
  });
56
49
  // e.g. iui-list-item-icon -> ListItemIcon
57
50
  const getDisplayNameFromClass = (str) => {
58
- const camel = str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
59
- return camel.substring(3);
51
+ const camel = str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
52
+ return camel.substring(3);
60
53
  };
61
54
  // e.g. iui-button -> _iui3-button
62
55
  const getScopedClassName = (className = '') => {
63
- return (
64
- className
65
- .split(' ')
66
- .map((c) => (c in styles ? styles[c] : c))
67
- .join(' ') || null
68
- );
56
+ return (className
57
+ .split(' ')
58
+ .map((c) => (c in styles ? styles[c] : c))
59
+ .join(' ') || null);
69
60
  };
@@ -11,25 +11,23 @@ import { mergeRefs } from '../hooks/useMergedRefs.js';
11
11
  * @private
12
12
  */
13
13
  export const cloneElementWithRef = (children, getProps) => {
14
- if (!children) {
15
- return null;
16
- }
17
- if (!React.isValidElement(children)) {
18
- return children;
19
- }
20
- const props = getProps(children);
21
- const ref = mergeRefs(
22
- ...[
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- 'ref' in children ? children.ref : null,
25
- 'ref' in props ? props.ref : null,
26
- ].filter(Boolean),
27
- );
28
- return React.cloneElement(children, {
29
- ...props,
30
- // we already checked ref above and handled null, so ts-ignore is ok
31
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
32
- // @ts-ignore
33
- ref,
34
- });
14
+ if (!children) {
15
+ return null;
16
+ }
17
+ if (!React.isValidElement(children)) {
18
+ return children;
19
+ }
20
+ const props = getProps(children);
21
+ const ref = mergeRefs(...[
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ 'ref' in children ? children.ref : null,
24
+ 'ref' in props ? props.ref : null,
25
+ ].filter(Boolean));
26
+ return React.cloneElement(children, {
27
+ ...props,
28
+ // we already checked ref above and handled null, so ts-ignore is ok
29
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
30
+ // @ts-ignore
31
+ ref,
32
+ });
35
33
  };
@@ -6,5 +6,4 @@ import { getWindow } from './dom.js';
6
6
  /**
7
7
  * Returns true if the :has selector is supported in the browser
8
8
  */
9
- export const supportsHas = () =>
10
- getWindow()?.CSS?.supports?.('selector(:has(+ *))');
9
+ export const supportsHas = () => getWindow()?.CSS?.supports?.('selector(:has(+ *))');
@@ -21,22 +21,19 @@ import { useResizeObserver } from './useResizeObserver.js';
21
21
  * return <div ref={ref}>...</div>;
22
22
  */
23
23
  export const useContainerWidth = (watchResizes = true) => {
24
- const [contentWidth, setContentWidth] = React.useState(0);
25
- const ref = React.useCallback((element) => {
26
- if (!element) {
27
- return;
24
+ const [contentWidth, setContentWidth] = React.useState(0);
25
+ const ref = React.useCallback((element) => {
26
+ if (!element) {
27
+ return;
28
+ }
29
+ setContentWidth(element.getBoundingClientRect().width);
30
+ }, []);
31
+ const updateWidth = React.useCallback(({ width }) => setContentWidth(width), []);
32
+ const [resizeRef, resizeObserver] = useResizeObserver(updateWidth);
33
+ if (!watchResizes) {
34
+ resizeObserver?.disconnect();
28
35
  }
29
- setContentWidth(element.getBoundingClientRect().width);
30
- }, []);
31
- const updateWidth = React.useCallback(
32
- ({ width }) => setContentWidth(width),
33
- [],
34
- );
35
- const [resizeRef, resizeObserver] = useResizeObserver(updateWidth);
36
- if (!watchResizes) {
37
- resizeObserver?.disconnect();
38
- }
39
- const refs = useMergedRefs(ref, watchResizes ? resizeRef : undefined);
40
- return [refs, contentWidth];
36
+ const refs = useMergedRefs(ref, watchResizes ? resizeRef : undefined);
37
+ return [refs, contentWidth];
41
38
  };
42
39
  export default useContainerWidth;
@@ -14,21 +14,12 @@ import * as React from 'react';
14
14
  * @example
15
15
  * const [state, setState] = useControlledState(null, props.value, props.onChange);
16
16
  */
17
- export const useControlledState = (
18
- initialValue,
19
- controlledState,
20
- setControlledState,
21
- ) => {
22
- const [uncontrolledState, setUncontrolledState] =
23
- React.useState(initialValue);
24
- const state =
25
- controlledState !== undefined ? controlledState : uncontrolledState;
26
- const setState = React.useCallback(
27
- (value) => {
28
- setUncontrolledState(value);
29
- setControlledState?.(value);
30
- },
31
- [setControlledState, setUncontrolledState],
32
- );
33
- return [state, setState];
17
+ export const useControlledState = (initialValue, controlledState, setControlledState) => {
18
+ const [uncontrolledState, setUncontrolledState] = React.useState(initialValue);
19
+ const state = controlledState !== undefined ? controlledState : uncontrolledState;
20
+ const setState = React.useCallback((value) => {
21
+ setUncontrolledState(value);
22
+ setControlledState?.(value);
23
+ }, [setControlledState, setUncontrolledState]);
24
+ return [state, setState];
34
25
  };
@@ -7,13 +7,13 @@ import { getTranslateValues, getWindow } from '../functions/index.js';
7
7
  import { useEventListener } from './useEventListener.js';
8
8
  import { useResizeObserver } from './useResizeObserver.js';
9
9
  const getContainerRect = (containerRef) => {
10
- const containerRect = containerRef?.current?.getBoundingClientRect();
11
- return {
12
- top: containerRect?.top ?? 0,
13
- right: containerRect?.right ?? getWindow()?.innerWidth ?? 0,
14
- bottom: containerRect?.bottom ?? getWindow()?.innerHeight ?? 0,
15
- left: containerRect?.left ?? 0,
16
- };
10
+ const containerRect = containerRef?.current?.getBoundingClientRect();
11
+ return {
12
+ top: containerRect?.top ?? 0,
13
+ right: containerRect?.right ?? getWindow()?.innerWidth ?? 0,
14
+ bottom: containerRect?.bottom ?? getWindow()?.innerHeight ?? 0,
15
+ left: containerRect?.left ?? 0,
16
+ };
17
17
  };
18
18
  /**
19
19
  * Helper hook that handles elements drag logic.
@@ -24,97 +24,78 @@ const getContainerRect = (containerRef) => {
24
24
  * `transform` - current transform of the element, it is used to preserve drag position when element visibility is being toggled.
25
25
  */
26
26
  export const useDragAndDrop = (elementRef, containerRef, enabled = true) => {
27
- const grabOffsetX = React.useRef(0);
28
- const grabOffsetY = React.useRef(0);
29
- const translateX = React.useRef();
30
- const translateY = React.useRef();
31
- const containerRectRef = React.useRef(getContainerRect(containerRef));
32
- const adjustTransform = React.useCallback(() => {
33
- if (!elementRef.current || !enabled) {
34
- return;
35
- }
36
- const { top, right, bottom, left } =
37
- elementRef.current?.getBoundingClientRect();
38
- let [newTranslateX, newTranslateY] = getTranslateValues(elementRef.current);
39
- containerRectRef.current = getContainerRect(containerRef);
40
- if (bottom > containerRectRef.current.bottom) {
41
- newTranslateY -= bottom - containerRectRef.current.bottom;
42
- }
43
- if (top < containerRectRef.current.top) {
44
- newTranslateY += containerRectRef.current.top - top;
45
- }
46
- if (right > containerRectRef.current.right) {
47
- newTranslateX -= right - containerRectRef.current.right;
48
- }
49
- if (left < containerRectRef.current.left) {
50
- newTranslateX += containerRectRef.current.left - left;
51
- }
52
- translateX.current = newTranslateX;
53
- translateY.current = newTranslateY;
54
- elementRef.current.style.transform = `translate(${newTranslateX}px, ${newTranslateY}px)`;
55
- }, [containerRef, elementRef, enabled]);
56
- const [resizeRef, resizeObserver] = useResizeObserver(adjustTransform);
57
- resizeRef(containerRef?.current);
58
- React.useEffect(() => {
59
- return () => {
60
- resizeObserver?.disconnect();
61
- };
62
- }, [resizeObserver]);
63
- useEventListener(
64
- 'resize',
65
- () => {
66
- adjustTransform();
67
- if (translateX.current != null && translateY.current != null) {
68
- setTransform(
69
- `translate(${translateX.current}px, ${translateY.current}px)`,
70
- );
71
- }
72
- },
73
- getWindow(),
74
- );
75
- const [transform, setTransform] = React.useState('');
76
- const onPointerMove = React.useRef((event) => {
77
- if (!elementRef.current) {
78
- return;
79
- }
80
- const newTranslateX = event.clientX - grabOffsetX.current;
81
- const newTranslateY = event.clientY - grabOffsetY.current;
82
- elementRef.current.style.transform = `translate(${newTranslateX}px, ${newTranslateY}px)`;
83
- adjustTransform();
84
- });
85
- const originalUserSelect = React.useRef('');
86
- const onPointerDown = React.useCallback(
87
- (e) => {
88
- if (!elementRef.current || e.button !== 0 || !enabled) {
89
- return;
90
- }
91
- const [x, y] = getTranslateValues(elementRef.current);
92
- grabOffsetX.current = e.clientX - x;
93
- grabOffsetY.current = e.clientY - y;
94
- originalUserSelect.current = elementRef.current.style.userSelect;
95
- // Prevents from selecting inner content when dragging.
96
- elementRef.current.style.userSelect = 'none';
97
- const ownerDocument = elementRef.current.ownerDocument || document;
98
- ownerDocument.addEventListener('pointermove', onPointerMove.current);
99
- ownerDocument.addEventListener(
100
- 'pointerup',
101
- () => {
102
- setTransform(
103
- `translate(${translateX.current}px, ${translateY.current}px)`,
104
- );
105
- ownerDocument.removeEventListener(
106
- 'pointermove',
107
- onPointerMove.current,
108
- );
109
- if (elementRef.current) {
110
- elementRef.current.style.userSelect = originalUserSelect.current;
111
- }
112
- },
113
- { once: true },
114
- );
115
- },
116
- [elementRef, enabled],
117
- );
118
- return { onPointerDown, transform };
27
+ const grabOffsetX = React.useRef(0);
28
+ const grabOffsetY = React.useRef(0);
29
+ const translateX = React.useRef();
30
+ const translateY = React.useRef();
31
+ const containerRectRef = React.useRef(getContainerRect(containerRef));
32
+ const adjustTransform = React.useCallback(() => {
33
+ if (!elementRef.current || !enabled) {
34
+ return;
35
+ }
36
+ const { top, right, bottom, left } = elementRef.current?.getBoundingClientRect();
37
+ let [newTranslateX, newTranslateY] = getTranslateValues(elementRef.current);
38
+ containerRectRef.current = getContainerRect(containerRef);
39
+ if (bottom > containerRectRef.current.bottom) {
40
+ newTranslateY -= bottom - containerRectRef.current.bottom;
41
+ }
42
+ if (top < containerRectRef.current.top) {
43
+ newTranslateY += containerRectRef.current.top - top;
44
+ }
45
+ if (right > containerRectRef.current.right) {
46
+ newTranslateX -= right - containerRectRef.current.right;
47
+ }
48
+ if (left < containerRectRef.current.left) {
49
+ newTranslateX += containerRectRef.current.left - left;
50
+ }
51
+ translateX.current = newTranslateX;
52
+ translateY.current = newTranslateY;
53
+ elementRef.current.style.transform = `translate(${newTranslateX}px, ${newTranslateY}px)`;
54
+ }, [containerRef, elementRef, enabled]);
55
+ const [resizeRef, resizeObserver] = useResizeObserver(adjustTransform);
56
+ resizeRef(containerRef?.current);
57
+ React.useEffect(() => {
58
+ return () => {
59
+ resizeObserver?.disconnect();
60
+ };
61
+ }, [resizeObserver]);
62
+ useEventListener('resize', () => {
63
+ adjustTransform();
64
+ if (translateX.current != null && translateY.current != null) {
65
+ setTransform(`translate(${translateX.current}px, ${translateY.current}px)`);
66
+ }
67
+ }, getWindow());
68
+ const [transform, setTransform] = React.useState('');
69
+ const onPointerMove = React.useRef((event) => {
70
+ if (!elementRef.current) {
71
+ return;
72
+ }
73
+ const newTranslateX = event.clientX - grabOffsetX.current;
74
+ const newTranslateY = event.clientY - grabOffsetY.current;
75
+ elementRef.current.style.transform = `translate(${newTranslateX}px, ${newTranslateY}px)`;
76
+ adjustTransform();
77
+ });
78
+ const originalUserSelect = React.useRef('');
79
+ const onPointerDown = React.useCallback((e) => {
80
+ if (!elementRef.current || e.button !== 0 || !enabled) {
81
+ return;
82
+ }
83
+ const [x, y] = getTranslateValues(elementRef.current);
84
+ grabOffsetX.current = e.clientX - x;
85
+ grabOffsetY.current = e.clientY - y;
86
+ originalUserSelect.current = elementRef.current.style.userSelect;
87
+ // Prevents from selecting inner content when dragging.
88
+ elementRef.current.style.userSelect = 'none';
89
+ const ownerDocument = elementRef.current.ownerDocument || document;
90
+ ownerDocument.addEventListener('pointermove', onPointerMove.current);
91
+ ownerDocument.addEventListener('pointerup', () => {
92
+ setTransform(`translate(${translateX.current}px, ${translateY.current}px)`);
93
+ ownerDocument.removeEventListener('pointermove', onPointerMove.current);
94
+ if (elementRef.current) {
95
+ elementRef.current.style.userSelect = originalUserSelect.current;
96
+ }
97
+ }, { once: true });
98
+ }, [elementRef, enabled]);
99
+ return { onPointerDown, transform };
119
100
  };
120
101
  export default useDragAndDrop;