@itwin/itwinui-react 3.0.0-dev.1 → 3.0.0-dev.3

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 (239) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/cjs/core/Alert/Alert.d.ts +47 -28
  3. package/cjs/core/Alert/Alert.js +73 -21
  4. package/cjs/core/Avatar/Avatar.js +1 -1
  5. package/cjs/core/AvatarGroup/AvatarGroup.js +1 -1
  6. package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -3
  7. package/cjs/core/ButtonGroup/ButtonGroup.js +1 -4
  8. package/cjs/core/Buttons/DropdownButton/DropdownButton.js +3 -5
  9. package/cjs/core/Carousel/Carousel.d.ts +2 -2
  10. package/cjs/core/Carousel/Carousel.js +3 -5
  11. package/cjs/core/Carousel/CarouselDotsList.js +8 -10
  12. package/cjs/core/Carousel/CarouselNavigation.d.ts +2 -2
  13. package/cjs/core/Carousel/CarouselNavigation.js +3 -5
  14. package/cjs/core/Carousel/CarouselSlider.js +10 -15
  15. package/cjs/core/ColorPicker/ColorBuilder.js +7 -10
  16. package/cjs/core/ColorPicker/ColorInputPanel.js +12 -15
  17. package/cjs/core/ColorPicker/ColorPalette.js +4 -6
  18. package/cjs/core/ColorPicker/ColorPicker.js +3 -3
  19. package/cjs/core/ComboBox/ComboBox.js +25 -32
  20. package/cjs/core/ComboBox/ComboBoxDropdown.js +1 -2
  21. package/cjs/core/ComboBox/ComboBoxEndIcon.js +1 -1
  22. package/cjs/core/ComboBox/ComboBoxInput.js +21 -20
  23. package/cjs/core/ComboBox/ComboBoxMenu.js +3 -4
  24. package/cjs/core/ComboBox/ComboBoxMenuItem.js +2 -2
  25. package/cjs/core/ComboBox/helpers.js +4 -5
  26. package/cjs/core/DatePicker/DatePicker.js +32 -32
  27. package/cjs/core/Dialog/Dialog.js +11 -4
  28. package/cjs/core/Dialog/DialogBackdrop.js +1 -1
  29. package/cjs/core/Dialog/DialogContext.d.ts +11 -0
  30. package/cjs/core/Dialog/DialogMain.js +16 -22
  31. package/cjs/core/DropdownMenu/DropdownMenu.js +6 -8
  32. package/cjs/core/ExpandableBlock/ExpandableBlock.js +2 -2
  33. package/cjs/core/FileUpload/FileEmptyCard.js +1 -1
  34. package/cjs/core/FileUpload/FileUpload.d.ts +3 -4
  35. package/cjs/core/FileUpload/FileUpload.js +5 -8
  36. package/cjs/core/FileUpload/FileUploadCard.js +9 -10
  37. package/cjs/core/FileUpload/FileUploadTemplate.d.ts +1 -0
  38. package/cjs/core/FileUpload/FileUploadTemplate.js +1 -0
  39. package/cjs/core/InformationPanel/InformationPanel.js +1 -4
  40. package/cjs/core/LabeledInput/LabeledInput.js +1 -1
  41. package/cjs/core/LabeledTextarea/LabeledTextarea.js +1 -1
  42. package/cjs/core/Menu/Menu.js +3 -4
  43. package/cjs/core/Menu/MenuItem.js +8 -11
  44. package/cjs/core/Modal/Modal.d.ts +8 -9
  45. package/cjs/core/Modal/Modal.js +7 -17
  46. package/cjs/core/SearchBox/SearchBox.js +12 -12
  47. package/cjs/core/Select/Select.js +12 -17
  48. package/cjs/core/SideNavigation/SideNavigation.js +2 -2
  49. package/cjs/core/Slider/Slider.js +16 -19
  50. package/cjs/core/Slider/Thumb.js +1 -1
  51. package/cjs/core/StatusMessage/StatusMessage.js +1 -1
  52. package/cjs/core/Stepper/Stepper.js +1 -1
  53. package/cjs/core/Stepper/StepperStep.js +1 -1
  54. package/cjs/core/Table/Table.js +15 -15
  55. package/cjs/core/Table/TablePaginator.js +2 -3
  56. package/cjs/core/Table/TableRowMemoized.js +38 -45
  57. package/cjs/core/Table/actionHandlers/expandHandler.js +3 -3
  58. package/cjs/core/Table/actionHandlers/filterHandler.js +4 -5
  59. package/cjs/core/Table/actionHandlers/selectHandler.js +6 -6
  60. package/cjs/core/Table/cells/DefaultCell.js +1 -1
  61. package/cjs/core/Table/cells/EditableCell.js +6 -12
  62. package/cjs/core/Table/columns/actionColumn.js +3 -6
  63. package/cjs/core/Table/columns/expanderColumn.js +3 -3
  64. package/cjs/core/Table/columns/selectionColumn.js +4 -4
  65. package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
  66. package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
  67. package/cjs/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
  68. package/cjs/core/Table/filters/TextFilter/TextFilter.js +1 -2
  69. package/cjs/core/Table/hooks/useResizeColumns.js +16 -22
  70. package/cjs/core/Table/hooks/useScrollToRow.js +1 -2
  71. package/cjs/core/Table/hooks/useStickyColumns.js +3 -5
  72. package/cjs/core/Table/hooks/useSubRowFiltering.js +2 -4
  73. package/cjs/core/Tabs/Tabs.js +13 -16
  74. package/cjs/core/ThemeProvider/ThemeContext.d.ts +1 -1
  75. package/cjs/core/ThemeProvider/ThemeProvider.d.ts +2 -3
  76. package/cjs/core/ThemeProvider/ThemeProvider.js +14 -13
  77. package/cjs/core/Tile/Tile.js +2 -3
  78. package/cjs/core/TimePicker/TimePicker.js +13 -13
  79. package/cjs/core/Toast/Toast.d.ts +5 -10
  80. package/cjs/core/Toast/Toast.js +17 -16
  81. package/cjs/core/Toast/Toaster.d.ts +24 -26
  82. package/cjs/core/Toast/Toaster.js +91 -121
  83. package/cjs/core/Toast/index.d.ts +1 -4
  84. package/cjs/core/Toast/index.js +3 -6
  85. package/cjs/core/TransferList/TransferList.js +3 -4
  86. package/cjs/core/Tree/Tree.js +9 -13
  87. package/cjs/core/Tree/TreeNode.js +9 -10
  88. package/cjs/core/index.d.ts +1 -2
  89. package/cjs/core/index.js +2 -5
  90. package/cjs/core/utils/color/ColorValue.js +9 -15
  91. package/cjs/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
  92. package/cjs/core/utils/components/FocusTrap.js +4 -4
  93. package/cjs/core/utils/components/MiddleTextTruncation.js +1 -2
  94. package/cjs/core/utils/components/Popover.d.ts +1 -1
  95. package/cjs/core/utils/components/Popover.js +5 -8
  96. package/cjs/core/utils/components/Resizer.js +7 -6
  97. package/cjs/core/utils/components/VirtualScroll.js +14 -21
  98. package/cjs/core/utils/functions/dom.d.ts +0 -8
  99. package/cjs/core/utils/functions/dom.js +3 -26
  100. package/cjs/core/utils/functions/polymorphic.d.ts +1 -1
  101. package/cjs/core/utils/functions/polymorphic.js +1 -1
  102. package/cjs/core/utils/functions/supports.js +1 -1
  103. package/cjs/core/utils/hooks/index.d.ts +0 -1
  104. package/cjs/core/utils/hooks/index.js +0 -1
  105. package/cjs/core/utils/hooks/useContainerWidth.js +1 -1
  106. package/cjs/core/utils/hooks/useDragAndDrop.js +8 -10
  107. package/cjs/core/utils/hooks/useEventListener.js +1 -1
  108. package/cjs/core/utils/hooks/useGlobals.d.ts +9 -2
  109. package/cjs/core/utils/hooks/useGlobals.js +6 -4
  110. package/cjs/core/utils/hooks/useId.js +1 -2
  111. package/cjs/core/utils/hooks/useIntersection.js +2 -3
  112. package/cjs/core/utils/hooks/useMediaQuery.js +6 -8
  113. package/cjs/core/utils/hooks/useOverflow.js +1 -2
  114. package/cjs/core/utils/hooks/useResizeObserver.js +3 -4
  115. package/cjs/styles.js +1 -4
  116. package/esm/core/Alert/Alert.d.ts +47 -28
  117. package/esm/core/Alert/Alert.js +74 -22
  118. package/esm/core/Avatar/Avatar.js +1 -1
  119. package/esm/core/AvatarGroup/AvatarGroup.js +1 -1
  120. package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -3
  121. package/esm/core/ButtonGroup/ButtonGroup.js +1 -4
  122. package/esm/core/Buttons/DropdownButton/DropdownButton.js +3 -5
  123. package/esm/core/Carousel/Carousel.d.ts +2 -2
  124. package/esm/core/Carousel/Carousel.js +3 -5
  125. package/esm/core/Carousel/CarouselDotsList.js +8 -10
  126. package/esm/core/Carousel/CarouselNavigation.d.ts +2 -2
  127. package/esm/core/Carousel/CarouselNavigation.js +3 -5
  128. package/esm/core/Carousel/CarouselSlider.js +10 -15
  129. package/esm/core/ColorPicker/ColorBuilder.js +7 -10
  130. package/esm/core/ColorPicker/ColorInputPanel.js +12 -15
  131. package/esm/core/ColorPicker/ColorPalette.js +4 -6
  132. package/esm/core/ColorPicker/ColorPicker.js +3 -3
  133. package/esm/core/ComboBox/ComboBox.js +25 -32
  134. package/esm/core/ComboBox/ComboBoxDropdown.js +1 -2
  135. package/esm/core/ComboBox/ComboBoxEndIcon.js +1 -1
  136. package/esm/core/ComboBox/ComboBoxInput.js +21 -20
  137. package/esm/core/ComboBox/ComboBoxMenu.js +3 -4
  138. package/esm/core/ComboBox/ComboBoxMenuItem.js +2 -2
  139. package/esm/core/ComboBox/helpers.js +4 -5
  140. package/esm/core/DatePicker/DatePicker.js +32 -32
  141. package/esm/core/Dialog/Dialog.js +12 -5
  142. package/esm/core/Dialog/DialogBackdrop.js +1 -1
  143. package/esm/core/Dialog/DialogContext.d.ts +11 -0
  144. package/esm/core/Dialog/DialogMain.js +16 -22
  145. package/esm/core/DropdownMenu/DropdownMenu.js +6 -8
  146. package/esm/core/ExpandableBlock/ExpandableBlock.js +2 -2
  147. package/esm/core/FileUpload/FileEmptyCard.js +1 -1
  148. package/esm/core/FileUpload/FileUpload.d.ts +3 -4
  149. package/esm/core/FileUpload/FileUpload.js +5 -8
  150. package/esm/core/FileUpload/FileUploadCard.js +9 -10
  151. package/esm/core/FileUpload/FileUploadTemplate.d.ts +1 -0
  152. package/esm/core/FileUpload/FileUploadTemplate.js +1 -0
  153. package/esm/core/InformationPanel/InformationPanel.js +1 -4
  154. package/esm/core/LabeledInput/LabeledInput.js +1 -1
  155. package/esm/core/LabeledTextarea/LabeledTextarea.js +1 -1
  156. package/esm/core/Menu/Menu.js +3 -4
  157. package/esm/core/Menu/MenuItem.js +8 -11
  158. package/esm/core/Modal/Modal.d.ts +8 -9
  159. package/esm/core/Modal/Modal.js +3 -10
  160. package/esm/core/SearchBox/SearchBox.js +12 -12
  161. package/esm/core/Select/Select.js +12 -17
  162. package/esm/core/SideNavigation/SideNavigation.js +2 -2
  163. package/esm/core/Slider/Slider.js +16 -19
  164. package/esm/core/Slider/Thumb.js +1 -1
  165. package/esm/core/StatusMessage/StatusMessage.js +1 -1
  166. package/esm/core/Stepper/Stepper.js +1 -1
  167. package/esm/core/Stepper/StepperStep.js +1 -1
  168. package/esm/core/Table/Table.js +15 -15
  169. package/esm/core/Table/TablePaginator.js +2 -3
  170. package/esm/core/Table/TableRowMemoized.js +38 -45
  171. package/esm/core/Table/actionHandlers/expandHandler.js +3 -3
  172. package/esm/core/Table/actionHandlers/filterHandler.js +4 -5
  173. package/esm/core/Table/actionHandlers/selectHandler.js +6 -6
  174. package/esm/core/Table/cells/DefaultCell.js +1 -1
  175. package/esm/core/Table/cells/EditableCell.js +6 -12
  176. package/esm/core/Table/columns/actionColumn.js +3 -6
  177. package/esm/core/Table/columns/expanderColumn.js +3 -3
  178. package/esm/core/Table/columns/selectionColumn.js +4 -4
  179. package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
  180. package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
  181. package/esm/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
  182. package/esm/core/Table/filters/TextFilter/TextFilter.js +1 -2
  183. package/esm/core/Table/hooks/useResizeColumns.js +16 -22
  184. package/esm/core/Table/hooks/useScrollToRow.js +1 -2
  185. package/esm/core/Table/hooks/useStickyColumns.js +3 -5
  186. package/esm/core/Table/hooks/useSubRowFiltering.js +2 -4
  187. package/esm/core/Tabs/Tabs.js +13 -16
  188. package/esm/core/ThemeProvider/ThemeContext.d.ts +1 -1
  189. package/esm/core/ThemeProvider/ThemeProvider.d.ts +2 -3
  190. package/esm/core/ThemeProvider/ThemeProvider.js +15 -14
  191. package/esm/core/Tile/Tile.js +2 -3
  192. package/esm/core/TimePicker/TimePicker.js +13 -13
  193. package/esm/core/Toast/Toast.d.ts +5 -10
  194. package/esm/core/Toast/Toast.js +18 -17
  195. package/esm/core/Toast/Toaster.d.ts +24 -26
  196. package/esm/core/Toast/Toaster.js +85 -121
  197. package/esm/core/Toast/index.d.ts +1 -4
  198. package/esm/core/Toast/index.js +1 -3
  199. package/esm/core/TransferList/TransferList.js +3 -4
  200. package/esm/core/Tree/Tree.js +9 -13
  201. package/esm/core/Tree/TreeNode.js +9 -10
  202. package/esm/core/index.d.ts +1 -2
  203. package/esm/core/index.js +1 -1
  204. package/esm/core/utils/color/ColorValue.js +9 -15
  205. package/esm/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
  206. package/esm/core/utils/components/FocusTrap.js +4 -4
  207. package/esm/core/utils/components/MiddleTextTruncation.js +1 -2
  208. package/esm/core/utils/components/Popover.d.ts +1 -1
  209. package/esm/core/utils/components/Popover.js +5 -8
  210. package/esm/core/utils/components/Resizer.js +7 -6
  211. package/esm/core/utils/components/VirtualScroll.js +14 -21
  212. package/esm/core/utils/functions/dom.d.ts +0 -8
  213. package/esm/core/utils/functions/dom.js +2 -21
  214. package/esm/core/utils/functions/polymorphic.d.ts +1 -1
  215. package/esm/core/utils/functions/polymorphic.js +1 -1
  216. package/esm/core/utils/functions/supports.js +1 -1
  217. package/esm/core/utils/hooks/index.d.ts +0 -1
  218. package/esm/core/utils/hooks/index.js +0 -1
  219. package/esm/core/utils/hooks/useContainerWidth.js +1 -1
  220. package/esm/core/utils/hooks/useDragAndDrop.js +8 -10
  221. package/esm/core/utils/hooks/useEventListener.js +1 -1
  222. package/esm/core/utils/hooks/useGlobals.d.ts +9 -2
  223. package/esm/core/utils/hooks/useGlobals.js +6 -4
  224. package/esm/core/utils/hooks/useId.js +1 -2
  225. package/esm/core/utils/hooks/useIntersection.js +2 -3
  226. package/esm/core/utils/hooks/useMediaQuery.js +6 -8
  227. package/esm/core/utils/hooks/useOverflow.js +1 -2
  228. package/esm/core/utils/hooks/useResizeObserver.js +3 -4
  229. package/esm/styles.js +1 -4
  230. package/package.json +2 -2
  231. package/styles.css +19 -20
  232. package/cjs/core/Toast/ToastWrapper.d.ts +0 -10
  233. package/cjs/core/Toast/ToastWrapper.js +0 -49
  234. package/cjs/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
  235. package/cjs/core/utils/hooks/useIsThemeAlreadySet.js +0 -54
  236. package/esm/core/Toast/ToastWrapper.d.ts +0 -10
  237. package/esm/core/Toast/ToastWrapper.js +0 -20
  238. package/esm/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
  239. package/esm/core/utils/hooks/useIsThemeAlreadySet.js +0 -27
@@ -110,17 +110,20 @@ export const generateLocalizedStrings = (locale) => {
110
110
  * <DatePicker date={new Date()} onChange={(e) => console.log('New date value: ' + e)} />
111
111
  */
112
112
  export const DatePicker = React.forwardRef((props, forwardedRef) => {
113
- var _a, _b, _c, _d, _e, _f, _g, _h;
114
113
  const { date, onChange, localizedNames, className, setFocus = false, showTime = false, use12Hours = false, precision, hourStep, minuteStep, secondStep, useCombinedRenderer, combinedRenderer, hourRenderer, minuteRenderer, secondRenderer, meridiemRenderer, showYearSelection = false, enableRangeSelect = false, startDate, endDate, isDateDisabled, ...rest } = props;
115
- const monthNames = (_a = localizedNames === null || localizedNames === void 0 ? void 0 : localizedNames.months) !== null && _a !== void 0 ? _a : defaultMonths;
116
- const shortDays = (_b = localizedNames === null || localizedNames === void 0 ? void 0 : localizedNames.shortDays) !== null && _b !== void 0 ? _b : defaultShortDays;
117
- const longDays = (_c = localizedNames === null || localizedNames === void 0 ? void 0 : localizedNames.days) !== null && _c !== void 0 ? _c : defaultLongDays;
114
+ const monthNames = localizedNames?.months ?? defaultMonths;
115
+ const shortDays = localizedNames?.shortDays ?? defaultShortDays;
116
+ const longDays = localizedNames?.days ?? defaultLongDays;
118
117
  const [selectedDay, setSelectedDay] = React.useState(date);
119
118
  const [selectedStartDay, setSelectedStartDay] = React.useState(startDate);
120
119
  const [selectedEndDay, setSelectedEndDay] = React.useState(endDate);
121
- const [focusedDay, setFocusedDay] = React.useState((_d = selectedStartDay !== null && selectedStartDay !== void 0 ? selectedStartDay : selectedDay) !== null && _d !== void 0 ? _d : new Date());
122
- const [displayedMonthIndex, setDisplayedMonthIndex] = React.useState((_f = (_e = selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getMonth()) !== null && _e !== void 0 ? _e : selectedDay === null || selectedDay === void 0 ? void 0 : selectedDay.getMonth()) !== null && _f !== void 0 ? _f : new Date().getMonth());
123
- const [displayedYear, setDisplayedYear] = React.useState((_h = (_g = selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getFullYear()) !== null && _g !== void 0 ? _g : selectedDay === null || selectedDay === void 0 ? void 0 : selectedDay.getFullYear()) !== null && _h !== void 0 ? _h : new Date().getFullYear());
120
+ const [focusedDay, setFocusedDay] = React.useState(selectedStartDay ?? selectedDay ?? new Date());
121
+ const [displayedMonthIndex, setDisplayedMonthIndex] = React.useState(selectedStartDay?.getMonth() ??
122
+ selectedDay?.getMonth() ??
123
+ new Date().getMonth());
124
+ const [displayedYear, setDisplayedYear] = React.useState(selectedStartDay?.getFullYear() ??
125
+ selectedDay?.getFullYear() ??
126
+ new Date().getFullYear());
124
127
  // boolean that toggles between the user picking the start date and end date for date range
125
128
  const [isSelectingStartDate, setIsSelectingStartDate] = React.useState(true);
126
129
  // Used to focus days only when days are changed
@@ -136,15 +139,16 @@ export const DatePicker = React.forwardRef((props, forwardedRef) => {
136
139
  setDisplayedYear(newYear);
137
140
  }, []);
138
141
  React.useEffect(() => {
139
- var _a, _b, _c, _d;
140
142
  const currentDate = new Date();
141
143
  setSelectedDay(date);
142
144
  setSelectedStartDay(startDate);
143
145
  setSelectedEndDay(endDate);
144
146
  if (!enableRangeSelect) {
145
- setFocusedDay(date !== null && date !== void 0 ? date : currentDate);
147
+ setFocusedDay(date ?? currentDate);
146
148
  }
147
- setMonthAndYear((_b = (_a = startDate === null || startDate === void 0 ? void 0 : startDate.getMonth()) !== null && _a !== void 0 ? _a : date === null || date === void 0 ? void 0 : date.getMonth()) !== null && _b !== void 0 ? _b : currentDate.getMonth(), (_d = (_c = startDate === null || startDate === void 0 ? void 0 : startDate.getFullYear()) !== null && _c !== void 0 ? _c : date === null || date === void 0 ? void 0 : date.getFullYear()) !== null && _d !== void 0 ? _d : currentDate.getFullYear());
149
+ setMonthAndYear(startDate?.getMonth() ?? date?.getMonth() ?? currentDate.getMonth(), startDate?.getFullYear() ??
150
+ date?.getFullYear() ??
151
+ currentDate.getFullYear());
148
152
  }, [date, setMonthAndYear, startDate, endDate, enableRangeSelect]);
149
153
  const days = React.useMemo(() => {
150
154
  let offsetToFirst = new Date(displayedYear, displayedMonthIndex, 1).getDay();
@@ -169,8 +173,7 @@ export const DatePicker = React.forwardRef((props, forwardedRef) => {
169
173
  return weeksInMonth;
170
174
  }, [days]);
171
175
  const getNewFocusedDate = (newYear, newMonth) => {
172
- var _a;
173
- const currentDate = (_a = selectedStartDay !== null && selectedStartDay !== void 0 ? selectedStartDay : selectedDay) !== null && _a !== void 0 ? _a : new Date();
176
+ const currentDate = selectedStartDay ?? selectedDay ?? new Date();
174
177
  const newDate = new Date(newYear, newMonth, currentDate.getDate(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds());
175
178
  return newDate;
176
179
  };
@@ -199,51 +202,51 @@ export const DatePicker = React.forwardRef((props, forwardedRef) => {
199
202
  const onDayClick = (day) => {
200
203
  // single date selection
201
204
  if (!enableRangeSelect) {
202
- if (day.getMonth() !== (selectedDay === null || selectedDay === void 0 ? void 0 : selectedDay.getMonth())) {
205
+ if (day.getMonth() !== selectedDay?.getMonth()) {
203
206
  setMonthAndYear(day.getMonth(), day.getFullYear());
204
207
  }
205
- const currentDate = selectedDay !== null && selectedDay !== void 0 ? selectedDay : new Date();
208
+ const currentDate = selectedDay ?? new Date();
206
209
  const newDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds());
207
210
  setSelectedDay(newDate);
208
211
  setFocusedDay(newDate);
209
- isSingleOnChange(onChange, enableRangeSelect) && (onChange === null || onChange === void 0 ? void 0 : onChange(newDate));
212
+ isSingleOnChange(onChange, enableRangeSelect) && onChange?.(newDate);
210
213
  }
211
214
  // start date selection (date range only)
212
215
  else if (isSelectingStartDate) {
213
- if (day.getMonth() !== (selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getMonth())) {
216
+ if (day.getMonth() !== selectedStartDay?.getMonth()) {
214
217
  setMonthAndYear(day.getMonth(), day.getFullYear());
215
218
  }
216
- const currentStartDate = selectedStartDay !== null && selectedStartDay !== void 0 ? selectedStartDay : new Date();
219
+ const currentStartDate = selectedStartDay ?? new Date();
217
220
  const newStartDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentStartDate.getHours(), currentStartDate.getMinutes(), currentStartDate.getSeconds());
218
221
  setSelectedStartDay(newStartDate);
219
222
  setFocusedDay(newStartDate);
220
223
  // if the start date is after the end date or the end date is undefined, reset the end date
221
224
  if (!isBefore(newStartDate, selectedEndDay)) {
222
225
  setSelectedEndDay(newStartDate);
223
- onChange === null || onChange === void 0 ? void 0 : onChange(newStartDate, newStartDate);
226
+ onChange?.(newStartDate, newStartDate);
224
227
  }
225
228
  else {
226
- selectedEndDay && (onChange === null || onChange === void 0 ? void 0 : onChange(newStartDate, selectedEndDay));
229
+ selectedEndDay && onChange?.(newStartDate, selectedEndDay);
227
230
  }
228
231
  setIsSelectingStartDate(false);
229
232
  }
230
233
  // end date selection (date range only)
231
234
  else {
232
- if (day.getMonth() !== (selectedEndDay === null || selectedEndDay === void 0 ? void 0 : selectedEndDay.getMonth())) {
235
+ if (day.getMonth() !== selectedEndDay?.getMonth()) {
233
236
  setMonthAndYear(day.getMonth(), day.getFullYear());
234
237
  }
235
- const currentEndDate = selectedEndDay !== null && selectedEndDay !== void 0 ? selectedEndDay : new Date();
238
+ const currentEndDate = selectedEndDay ?? new Date();
236
239
  const newEndDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentEndDate.getHours(), currentEndDate.getMinutes(), currentEndDate.getSeconds());
237
240
  setFocusedDay(newEndDate);
238
241
  // if the end date is before the start date, move back the start date and still have user select end date
239
242
  if (!isBefore(newEndDate, selectedStartDay)) {
240
243
  setSelectedEndDay(newEndDate);
241
- selectedStartDay && (onChange === null || onChange === void 0 ? void 0 : onChange(selectedStartDay, newEndDate));
244
+ selectedStartDay && onChange?.(selectedStartDay, newEndDate);
242
245
  setIsSelectingStartDate(true);
243
246
  }
244
247
  else {
245
248
  setSelectedStartDay(newEndDate);
246
- selectedEndDay && (onChange === null || onChange === void 0 ? void 0 : onChange(newEndDate, selectedEndDay));
249
+ selectedEndDay && onChange?.(newEndDate, selectedEndDay);
247
250
  }
248
251
  }
249
252
  };
@@ -295,7 +298,7 @@ export const DatePicker = React.forwardRef((props, forwardedRef) => {
295
298
  case 'Enter':
296
299
  case ' ':
297
300
  case 'Spacebar':
298
- if (!(isDateDisabled === null || isDateDisabled === void 0 ? void 0 : isDateDisabled(focusedDay))) {
301
+ if (!isDateDisabled?.(focusedDay)) {
299
302
  onDayClick(focusedDay);
300
303
  }
301
304
  event.preventDefault();
@@ -348,17 +351,14 @@ export const DatePicker = React.forwardRef((props, forwardedRef) => {
348
351
  React.createElement("div", { onKeyDown: handleCalendarKeyDown, role: 'listbox' }, weeks.map((weekDays, weekIndex) => {
349
352
  return (React.createElement(Box, { key: `week-${displayedMonthIndex}-${weekIndex}`, className: 'iui-calendar-week' }, weekDays.map((weekDay, dayIndex) => {
350
353
  const dateValue = weekDay.getDate();
351
- const isDisabled = isDateDisabled === null || isDateDisabled === void 0 ? void 0 : isDateDisabled(weekDay);
354
+ const isDisabled = isDateDisabled?.(weekDay);
352
355
  return (React.createElement(Box, { key: `day-${displayedMonthIndex}-${dayIndex}`, className: getDayClass(weekDay), onClick: () => !isDisabled && onDayClick(weekDay), role: 'option', tabIndex: isSameDay(weekDay, focusedDay) ? 0 : -1, "aria-disabled": isDisabled ? 'true' : undefined, ref: (element) => isSameDay(weekDay, focusedDay) &&
353
356
  needFocus.current &&
354
- (element === null || element === void 0 ? void 0 : element.focus()) }, dateValue));
357
+ element?.focus() }, dateValue));
355
358
  })));
356
359
  }))),
357
- showTime && (React.createElement(TimePicker, { date: selectedStartDay !== null && selectedStartDay !== void 0 ? selectedStartDay : selectedDay, use12Hours: use12Hours, precision: precision, hourStep: hourStep, minuteStep: minuteStep, secondStep: secondStep, useCombinedRenderer: useCombinedRenderer, combinedRenderer: combinedRenderer, hourRenderer: hourRenderer, minuteRenderer: minuteRenderer, secondRenderer: secondRenderer, meridiemRenderer: meridiemRenderer, onChange: (date) => {
358
- var _a, _b, _c, _d, _e, _f;
359
- return isSingleOnChange(onChange, enableRangeSelect)
360
- ? onChange === null || onChange === void 0 ? void 0 : onChange(date)
361
- : onChange === null || onChange === void 0 ? void 0 : onChange(new Date((_a = selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getFullYear()) !== null && _a !== void 0 ? _a : date.getFullYear(), (_b = selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getMonth()) !== null && _b !== void 0 ? _b : date.getMonth(), (_c = selectedStartDay === null || selectedStartDay === void 0 ? void 0 : selectedStartDay.getDate()) !== null && _c !== void 0 ? _c : date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()), new Date((_d = selectedEndDay === null || selectedEndDay === void 0 ? void 0 : selectedEndDay.getFullYear()) !== null && _d !== void 0 ? _d : date.getFullYear(), (_e = selectedEndDay === null || selectedEndDay === void 0 ? void 0 : selectedEndDay.getMonth()) !== null && _e !== void 0 ? _e : date.getMonth(), (_f = selectedEndDay === null || selectedEndDay === void 0 ? void 0 : selectedEndDay.getDate()) !== null && _f !== void 0 ? _f : date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
362
- } }))));
360
+ showTime && (React.createElement(TimePicker, { date: selectedStartDay ?? selectedDay, use12Hours: use12Hours, precision: precision, hourStep: hourStep, minuteStep: minuteStep, secondStep: secondStep, useCombinedRenderer: useCombinedRenderer, combinedRenderer: combinedRenderer, hourRenderer: hourRenderer, minuteRenderer: minuteRenderer, secondRenderer: secondRenderer, meridiemRenderer: meridiemRenderer, onChange: (date) => isSingleOnChange(onChange, enableRangeSelect)
361
+ ? onChange?.(date)
362
+ : onChange?.(new Date(selectedStartDay?.getFullYear() ?? date.getFullYear(), selectedStartDay?.getMonth() ?? date.getMonth(), selectedStartDay?.getDate() ?? date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()), new Date(selectedEndDay?.getFullYear() ?? date.getFullYear(), selectedEndDay?.getMonth() ?? date.getMonth(), selectedEndDay?.getDate() ?? date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())) }))));
363
363
  });
364
364
  export default DatePicker;
@@ -3,6 +3,7 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import * as React from 'react';
6
+ import * as ReactDOM from 'react-dom';
6
7
  import cx from 'classnames';
7
8
  import { DialogTitleBar } from './DialogTitleBar.js';
8
9
  import { DialogContent } from './DialogContent.js';
@@ -10,11 +11,18 @@ import { DialogBackdrop } from './DialogBackdrop.js';
10
11
  import { DialogContext } from './DialogContext.js';
11
12
  import { DialogButtonBar } from './DialogButtonBar.js';
12
13
  import { DialogMain } from './DialogMain.js';
13
- import { useMergedRefs, Box } from '../utils/index.js';
14
+ import { useMergedRefs, Box, useGlobals, getDocument, useIsClient, } from '../utils/index.js';
14
15
  const DialogComponent = React.forwardRef((props, ref) => {
15
- const { trapFocus = false, setFocus = false, preventDocumentScroll = false, isOpen = false, isDismissible = true, closeOnEsc = true, closeOnExternalClick = false, onClose, isDraggable = false, isResizable = false, relativeTo = 'viewport', placement, className, ...rest } = props;
16
+ const { trapFocus = false, setFocus = false, preventDocumentScroll = false, isOpen = false, isDismissible = true, closeOnEsc = true, closeOnExternalClick = false, onClose, isDraggable = false, isResizable = false, relativeTo = 'viewport', placement, className, portal = false, ...rest } = props;
16
17
  const dialogRootRef = React.useRef(null);
17
- const refs = useMergedRefs(ref, dialogRootRef);
18
+ const context = useGlobals();
19
+ const isClient = useIsClient();
20
+ const portalTo = typeof portal !== 'boolean'
21
+ ? portal.to
22
+ : portal
23
+ ? context?.portalContainerRef?.current ?? getDocument()?.body
24
+ : null;
25
+ const dialog = (React.createElement(Box, { className: cx('iui-dialog-wrapper', className), "data-iui-relative": relativeTo === 'container', ref: useMergedRefs(ref, dialogRootRef), ...rest }));
18
26
  return (React.createElement(DialogContext.Provider, { value: {
19
27
  isOpen,
20
28
  onClose,
@@ -29,8 +37,7 @@ const DialogComponent = React.forwardRef((props, ref) => {
29
37
  relativeTo,
30
38
  dialogRootRef,
31
39
  placement,
32
- } },
33
- React.createElement(Box, { className: cx('iui-dialog-wrapper', className), "data-iui-relative": relativeTo === 'container', ref: refs, ...rest })));
40
+ } }, portalTo && isClient ? ReactDOM.createPortal(dialog, portalTo) : dialog));
34
41
  });
35
42
  /**
36
43
  * Dialog component.
@@ -27,7 +27,7 @@ export const DialogBackdrop = React.forwardRef((props, ref) => {
27
27
  if (isDismissible && closeOnExternalClick && onClose) {
28
28
  onClose(event);
29
29
  }
30
- onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(event);
30
+ onMouseDown?.(event);
31
31
  };
32
32
  return (React.createElement(Backdrop, { isVisible: isVisible, className: cx({ 'iui-backdrop-fixed': relativeTo === 'viewport' }, className), ref: refs, onMouseDown: handleMouseDown, style: {
33
33
  pointerEvents: 'auto',
@@ -61,6 +61,17 @@ export declare type DialogContextProps = {
61
61
  * @default 'viewport'
62
62
  */
63
63
  relativeTo?: 'container' | 'viewport';
64
+ /**
65
+ * If true, the dialog will be portaled into a <div> inside the nearest `ThemeProvider`.
66
+ * Recommended to set to true when for modal dialogs that use `relativeTo='viewport'`.
67
+ *
68
+ * Can be set to an object with a `to` property to portal into a specific element.
69
+ *
70
+ * @default false
71
+ */
72
+ portal?: boolean | {
73
+ to: HTMLElement;
74
+ };
64
75
  /**
65
76
  * Dialog root ref. For internal use.
66
77
  */
@@ -45,8 +45,7 @@ export const DialogMain = React.forwardRef((props, ref) => {
45
45
  }, [isOpen]);
46
46
  // Prevents document from scrolling when the dialog is open.
47
47
  React.useEffect(() => {
48
- var _a;
49
- const ownerDocument = (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument;
48
+ const ownerDocument = dialogRef.current?.ownerDocument;
50
49
  // If there is no `ownerDocument` or `preventDocumentScroll` is false or
51
50
  // document body originally has `overflow: hidden` (possibly from other/parent dialog), then do nothing.
52
51
  if (!ownerDocument ||
@@ -73,7 +72,7 @@ export const DialogMain = React.forwardRef((props, ref) => {
73
72
  if (isDismissible && closeOnEsc && event.key === 'Escape' && onClose) {
74
73
  onClose(event);
75
74
  }
76
- onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
75
+ onKeyDown?.(event);
77
76
  };
78
77
  const { onPointerDown, transform } = useDragAndDrop(dialogRef, dialogContext.dialogRootRef, isDraggable);
79
78
  const handlePointerDown = React.useCallback((event) => {
@@ -83,23 +82,19 @@ export const DialogMain = React.forwardRef((props, ref) => {
83
82
  }, [isDraggable, onPointerDown]);
84
83
  // Prevents dialog from moving when window is being resized
85
84
  useIsomorphicLayoutEffect(() => {
86
- var _a;
87
85
  if (!isDraggable || !isOpen) {
88
86
  return;
89
87
  }
90
- const rect = (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
88
+ const rect = dialogRef.current?.getBoundingClientRect();
91
89
  const [translateX, translateY] = getTranslateValues(dialogRef.current);
92
- setStyle((oldStyle) => {
93
- var _a, _b;
94
- return ({
95
- ...oldStyle,
96
- width: rect === null || rect === void 0 ? void 0 : rect.width,
97
- height: rect === null || rect === void 0 ? void 0 : rect.height,
98
- left: (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.offsetLeft,
99
- top: (_b = dialogRef.current) === null || _b === void 0 ? void 0 : _b.offsetTop,
100
- transform: `translate(${translateX}px,${translateY}px)`,
101
- });
102
- });
90
+ setStyle((oldStyle) => ({
91
+ ...oldStyle,
92
+ width: rect?.width,
93
+ height: rect?.height,
94
+ left: dialogRef.current?.offsetLeft,
95
+ top: dialogRef.current?.offsetTop,
96
+ transform: `translate(${translateX}px,${translateY}px)`,
97
+ }));
103
98
  }, [isDraggable, isOpen]);
104
99
  const setResizeStyle = React.useCallback((newStyle) => {
105
100
  setStyle((oldStyle) => ({
@@ -131,15 +126,14 @@ export const DialogMain = React.forwardRef((props, ref) => {
131
126
  }, timeout: { exit: 600 },
132
127
  // Focuses dialog when opened
133
128
  onEntered: () => {
134
- var _a, _b;
135
- previousFocusedElement.current = (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.activeElement;
136
- setFocus && ((_b = dialogRef.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true }));
129
+ previousFocusedElement.current = dialogRef.current?.ownerDocument
130
+ .activeElement;
131
+ setFocus && dialogRef.current?.focus({ preventScroll: true });
137
132
  },
138
133
  // Brings back focus to the previously focused element when closed
139
134
  onExit: () => {
140
- var _a, _b, _c;
141
- if ((_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.contains((_b = dialogRef.current) === null || _b === void 0 ? void 0 : _b.ownerDocument.activeElement)) {
142
- (_c = previousFocusedElement.current) === null || _c === void 0 ? void 0 : _c.focus();
135
+ if (dialogRef.current?.contains(dialogRef.current?.ownerDocument.activeElement)) {
136
+ previousFocusedElement.current?.focus();
143
137
  }
144
138
  }, unmountOnExit: true, nodeRef: dialogRef },
145
139
  React.createElement(DialogDragContext.Provider, { value: { onPointerDown: handlePointerDown } },
@@ -26,29 +26,27 @@ import { Menu } from '../Menu/index.js';
26
26
  */
27
27
  export const DropdownMenu = (props) => {
28
28
  const { menuItems, children, className, style, role = 'menu', visible, placement = 'bottom-start', onShow, onHide, trigger, id, ...rest } = props;
29
- const [isVisible, setIsVisible] = React.useState(visible !== null && visible !== void 0 ? visible : false);
29
+ const [isVisible, setIsVisible] = React.useState(visible ?? false);
30
30
  React.useEffect(() => {
31
- setIsVisible(visible !== null && visible !== void 0 ? visible : false);
31
+ setIsVisible(visible ?? false);
32
32
  }, [visible]);
33
33
  const open = React.useCallback(() => setIsVisible(true), []);
34
34
  const close = React.useCallback(() => setIsVisible(false), []);
35
35
  const targetRef = React.useRef(null);
36
36
  const onShowHandler = React.useCallback((instance) => {
37
37
  setIsVisible(true);
38
- onShow === null || onShow === void 0 ? void 0 : onShow(instance);
38
+ onShow?.(instance);
39
39
  }, [onShow]);
40
40
  const onHideHandler = React.useCallback((instance) => {
41
- var _a;
42
41
  setIsVisible(false);
43
- (_a = targetRef.current) === null || _a === void 0 ? void 0 : _a.focus();
44
- onHide === null || onHide === void 0 ? void 0 : onHide(instance);
42
+ targetRef.current?.focus();
43
+ onHide?.(instance);
45
44
  }, [onHide]);
46
45
  return (React.createElement(Popover, { content: React.createElement(Menu, { className: className, style: style, role: role, id: id }, React.useMemo(() => menuItems(close), [menuItems, close])), visible: trigger === undefined ? isVisible : undefined, onClickOutside: close, placement: placement, onShow: onShowHandler, onHide: onHideHandler, trigger: visible === undefined ? trigger : undefined, ...rest }, React.cloneElement(children, {
47
46
  ref: mergeRefs(targetRef, props.children.ref),
48
47
  onClick: (args) => {
49
- var _a, _b;
50
48
  trigger === undefined && (isVisible ? close() : open());
51
- (_b = (_a = children.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, args);
49
+ children.props.onClick?.(args);
52
50
  },
53
51
  })));
54
52
  };
@@ -16,7 +16,7 @@ import { StatusIconMap, WithCSSTransition, SvgChevronRight, Icon, Box, } from '.
16
16
  */
17
17
  export const ExpandableBlock = React.forwardRef((props, ref) => {
18
18
  const { caption, children, className, title, onToggle, style, isExpanded = false, endIcon, status, size = 'default', styleType = 'default', disabled = false, ...rest } = props;
19
- const icon = endIcon !== null && endIcon !== void 0 ? endIcon : (status && StatusIconMap[status]());
19
+ const icon = endIcon ?? (status && StatusIconMap[status]());
20
20
  const [expanded, setExpanded] = React.useState(isExpanded);
21
21
  React.useEffect(() => {
22
22
  setExpanded(isExpanded);
@@ -26,7 +26,7 @@ export const ExpandableBlock = React.forwardRef((props, ref) => {
26
26
  return;
27
27
  }
28
28
  setExpanded(!expanded);
29
- onToggle === null || onToggle === void 0 ? void 0 : onToggle(!expanded);
29
+ onToggle?.(!expanded);
30
30
  };
31
31
  const onKeyDown = (event) => {
32
32
  if (event.altKey || disabled) {
@@ -18,7 +18,7 @@ const FileEmptyCardText = polymorphic.span('iui-file-card-empty-action');
18
18
  // FileEmptyCard component
19
19
  const FileEmptyCardComponent = React.forwardRef((props, ref) => {
20
20
  const { children, className, ...rest } = props;
21
- return (React.createElement(Box, { className: cx('iui-file-card-empty', className), ref: ref, ...rest }, children !== null && children !== void 0 ? children : (React.createElement(React.Fragment, null,
21
+ return (React.createElement(Box, { className: cx('iui-file-card-empty', className), ref: ref, ...rest }, children ?? (React.createElement(React.Fragment, null,
22
22
  React.createElement(FileEmptyCard.Icon, null),
23
23
  React.createElement(FileEmptyCard.Text, null,
24
24
  React.createElement(FileUploadCard.InputLabel, null, "Choose a file"),
@@ -4,7 +4,6 @@ declare type FileUploadProps = {
4
4
  /**
5
5
  * Content shown over `children` when file is being dragged onto the component.
6
6
  * Should always be used when drag content differs from `children` being wrapped.
7
- * Can be skipped if wrapping `FileUploadTemplate`.
8
7
  */
9
8
  dragContent?: React.ReactNode;
10
9
  /**
@@ -13,15 +12,15 @@ declare type FileUploadProps = {
13
12
  onFileDropped: (files: FileList) => void;
14
13
  /**
15
14
  * Component to wrap `FileUpload` around.
16
- * Either pass `FileUploadTemplate` (for default state) or a different component to wrap.
15
+ * Either pass `FileUploadCard` (for default state) or a different component to wrap.
17
16
  */
18
17
  children: React.ReactNode;
19
18
  };
20
19
  /**
21
- * File upload component to be wrapped around `FileUploadTemplate` or any arbitrary component.
20
+ * File upload component to be wrapped around `FileUploadCard` or any arbitrary component.
22
21
  * Provides support for dragging and dropping multiple files.
23
22
  * @example
24
- * <FileUpload onFileDropped={console.log}><FileUploadTemplate /></FileUpload>
23
+ * <FileUpload onFileDropped={console.log}><FileUploadCard /></FileUpload>
25
24
  * <FileUpload dragContent='Drop file here' onFileDropped={console.log}><Textarea /></FileUpload>
26
25
  */
27
26
  export declare const FileUpload: PolymorphicForwardRefComponent<"div", FileUploadProps>;
@@ -6,10 +6,10 @@ import * as React from 'react';
6
6
  import cx from 'classnames';
7
7
  import { Box, useMergedRefs } from '../utils/index.js';
8
8
  /**
9
- * File upload component to be wrapped around `FileUploadTemplate` or any arbitrary component.
9
+ * File upload component to be wrapped around `FileUploadCard` or any arbitrary component.
10
10
  * Provides support for dragging and dropping multiple files.
11
11
  * @example
12
- * <FileUpload onFileDropped={console.log}><FileUploadTemplate /></FileUpload>
12
+ * <FileUpload onFileDropped={console.log}><FileUploadCard /></FileUpload>
13
13
  * <FileUpload dragContent='Drop file here' onFileDropped={console.log}><Textarea /></FileUpload>
14
14
  */
15
15
  export const FileUpload = React.forwardRef((props, ref) => {
@@ -22,31 +22,28 @@ export const FileUpload = React.forwardRef((props, ref) => {
22
22
  e.stopPropagation();
23
23
  };
24
24
  const onDragEnterHandler = (e) => {
25
- var _a, _b, _c;
26
25
  e.preventDefault();
27
26
  e.stopPropagation();
28
27
  // only set active if a file is dragged over
29
- if (!isDragActive && ((_c = (_b = (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.kind) === 'file') {
28
+ if (!isDragActive && e.dataTransfer?.items?.[0]?.kind === 'file') {
30
29
  setIsDragActive(true);
31
30
  }
32
31
  };
33
32
  const onDragLeaveHandler = (e) => {
34
- var _a;
35
33
  e.preventDefault();
36
34
  e.stopPropagation();
37
35
  // only set inactive if secondary target is outside the component
38
36
  if (isDragActive &&
39
- !((_a = fileUploadRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget))) {
37
+ !fileUploadRef.current?.contains(e.relatedTarget)) {
40
38
  setIsDragActive(false);
41
39
  }
42
40
  };
43
41
  const onDropHandler = (e) => {
44
- var _a;
45
42
  e.preventDefault();
46
43
  e.stopPropagation();
47
44
  if (isDragActive) {
48
45
  setIsDragActive(false);
49
- onFileDropped((_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files);
46
+ onFileDropped(e.dataTransfer?.files);
50
47
  }
51
48
  };
52
49
  return (React.createElement(Box, { className: cx('iui-file-upload', { 'iui-drag': isDragActive }, className), onDragEnter: onDragEnterHandler, onDragOver: onDragOverHandler, onDragLeave: onDragLeaveHandler, onDrop: onDropHandler, ref: refs, ...rest },
@@ -35,7 +35,7 @@ const FileUploadCardTitle = React.forwardRef((props, ref) => {
35
35
  const { children, className, ...rest } = props;
36
36
  const { files } = useSafeContext(FileUploadCardContext);
37
37
  const title = files.length > 1 ? files.length + ' files selected' : files[0].name;
38
- return (React.createElement(Box, { as: 'span', className: cx('iui-file-card-title', className), ref: ref, ...rest }, children !== null && children !== void 0 ? children : title));
38
+ return (React.createElement(Box, { as: 'span', className: cx('iui-file-card-title', className), ref: ref, ...rest }, children ?? title));
39
39
  });
40
40
  FileUploadCardTitle.displayName = 'FileUploadCard.Title';
41
41
  // ----------------------------------------------------------------------------
@@ -49,7 +49,7 @@ const FileUploadCardDescription = React.forwardRef((props, ref) => {
49
49
  if (files.length > 2) {
50
50
  description += ', and ' + (files.length - 2) + ' others';
51
51
  }
52
- return (React.createElement(Box, { as: 'span', className: cx('iui-file-card-description', className), ref: ref, ...rest }, children !== null && children !== void 0 ? children : description));
52
+ return (React.createElement(Box, { as: 'span', className: cx('iui-file-card-description', className), ref: ref, ...rest }, children ?? description));
53
53
  });
54
54
  FileUploadCardDescription.displayName = 'FileUploadCard.Description';
55
55
  // ----------------------------------------------------------------------------
@@ -70,8 +70,7 @@ const FileUploadCardInput = React.forwardRef((props, ref) => {
70
70
  const { children, onChange, id, ...rest } = props;
71
71
  const { files, onFilesChange, setInternalFiles, inputId, setInputId } = useSafeContext(FileUploadCardContext);
72
72
  const setNativeFilesRef = React.useCallback((node) => {
73
- var _a;
74
- if (!node || !((_a = getWindow()) === null || _a === void 0 ? void 0 : _a.DataTransfer)) {
73
+ if (!node || !getWindow()?.DataTransfer) {
75
74
  return;
76
75
  }
77
76
  const dataTransfer = new DataTransfer();
@@ -88,19 +87,18 @@ const FileUploadCardInput = React.forwardRef((props, ref) => {
88
87
  return (React.createElement(React.Fragment, null,
89
88
  React.createElement(VisuallyHidden, { as: 'input', type: 'file', unhideOnFocus: false, onChange: mergeEventHandlers(onChange, (e) => {
90
89
  const _files = Array.from(e.currentTarget.files || []);
91
- onFilesChange === null || onFilesChange === void 0 ? void 0 : onFilesChange(_files);
90
+ onFilesChange?.(_files);
92
91
  setInternalFiles(_files);
93
- }), ref: refs, id: id !== null && id !== void 0 ? id : inputId, ...rest }),
92
+ }), ref: refs, id: id ?? inputId, ...rest }),
94
93
  children));
95
94
  });
96
95
  FileUploadCardInput.displayName = 'FileUploadCard.Input';
97
96
  const FileUploadCardComponent = React.forwardRef((props, ref) => {
98
- var _a;
99
97
  const { className, children, files: filesProp, onFilesChange, emptyCard = React.createElement(FileEmptyCard, null), input, ...rest } = props;
100
98
  const [internalFiles, setInternalFiles] = React.useState();
101
99
  const uid = useId();
102
100
  const [inputId, setInputId] = React.useState(uid);
103
- const files = (_a = filesProp !== null && filesProp !== void 0 ? filesProp : internalFiles) !== null && _a !== void 0 ? _a : [];
101
+ const files = filesProp ?? internalFiles ?? [];
104
102
  return (React.createElement(FileUploadCardContext.Provider, { value: {
105
103
  files,
106
104
  onFilesChange,
@@ -108,13 +106,14 @@ const FileUploadCardComponent = React.forwardRef((props, ref) => {
108
106
  inputId,
109
107
  setInputId,
110
108
  } },
111
- (files === null || files === void 0 ? void 0 : files.length) ? (React.createElement(Box, { className: cx('iui-file-card', className), ref: ref, ...rest }, children !== null && children !== void 0 ? children : (React.createElement(React.Fragment, null,
109
+ files?.length ? (React.createElement(Box, { className: cx('iui-file-card', className), ref: ref, ...rest }, children ?? (React.createElement(React.Fragment, null,
112
110
  React.createElement(FileUploadCard.Icon, null),
113
111
  React.createElement(FileUploadCard.Info, null,
114
112
  React.createElement(FileUploadCard.Title, null),
115
113
  React.createElement(FileUploadCard.Description, null)),
116
114
  React.createElement(FileUploadCard.Action, null,
117
- React.createElement(FileUploadCard.InputLabel, null, "Replace")))))) : (emptyCard), input !== null && input !== void 0 ? input : React.createElement(FileUploadCard.Input, null)));
115
+ React.createElement(FileUploadCard.InputLabel, null, "Replace")))))) : (emptyCard),
116
+ input ?? React.createElement(FileUploadCard.Input, null)));
118
117
  });
119
118
  /**
120
119
  * Default card to be used with the `FileUpload` wrapper component for single-file uploading.
@@ -32,6 +32,7 @@ declare type FileUploadTemplateProps = {
32
32
  children?: React.ReactNode;
33
33
  };
34
34
  /**
35
+ * @deprecated Use `FileUploadCard` instead.
35
36
  * Default template to be used with the `FileUpload` wrapper component.
36
37
  * Contains a hidden input with styled labels (customizable).
37
38
  * @example
@@ -7,6 +7,7 @@ import cx from 'classnames';
7
7
  import { SvgUpload, Box } from '../utils/index.js';
8
8
  import { Anchor } from '../Typography/Anchor/Anchor.js';
9
9
  /**
10
+ * @deprecated Use `FileUploadCard` instead.
10
11
  * Default template to be used with the `FileUpload` wrapper component.
11
12
  * Contains a hidden input with styled labels (customizable).
12
13
  * @example
@@ -40,10 +40,7 @@ export const InformationPanel = React.forwardRef((props, ref) => {
40
40
  e.preventDefault();
41
41
  e.stopPropagation();
42
42
  infoPanelRef.current.ownerDocument.addEventListener('pointermove', onResize);
43
- infoPanelRef.current.ownerDocument.addEventListener('pointerup', () => {
44
- var _a;
45
- return (_a = infoPanelRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.removeEventListener('pointermove', onResize);
46
- }, { once: true });
43
+ infoPanelRef.current.ownerDocument.addEventListener('pointerup', () => infoPanelRef.current?.ownerDocument.removeEventListener('pointermove', onResize), { once: true });
47
44
  };
48
45
  const onResize = React.useCallback((e) => {
49
46
  e.preventDefault();
@@ -16,7 +16,7 @@ import { StatusIconMap, InputContainer, useId } from '../utils/index.js';
16
16
  export const LabeledInput = React.forwardRef((props, ref) => {
17
17
  const uid = useId();
18
18
  const { className, disabled = false, label, message, status, svgIcon, style, inputClassName, inputStyle, displayStyle = 'default', iconDisplayStyle = displayStyle === 'default' ? 'block' : 'inline', required = false, id = uid, ...rest } = props;
19
- const icon = svgIcon !== null && svgIcon !== void 0 ? svgIcon : (status && StatusIconMap[status]());
19
+ const icon = svgIcon ?? (status && StatusIconMap[status]());
20
20
  return (React.createElement(InputContainer, { label: label, disabled: disabled, required: required, status: status, message: message, icon: icon, isLabelInline: displayStyle === 'inline', isIconInline: iconDisplayStyle === 'inline', className: className, style: style, inputId: id },
21
21
  React.createElement(Input, { disabled: disabled, className: inputClassName, style: inputStyle, required: required, ref: ref, id: id, ...rest })));
22
22
  });
@@ -29,7 +29,7 @@ import { Textarea } from '../Textarea/index.js';
29
29
  export const LabeledTextarea = React.forwardRef((props, ref) => {
30
30
  const uid = useId();
31
31
  const { className, style, disabled = false, label, message, status, textareaClassName, textareaStyle, displayStyle = 'default', iconDisplayStyle = displayStyle === 'default' ? 'block' : 'inline', svgIcon, required = false, id = uid, ...textareaProps } = props;
32
- const icon = svgIcon !== null && svgIcon !== void 0 ? svgIcon : (status && StatusIconMap[status]());
32
+ const icon = svgIcon ?? (status && StatusIconMap[status]());
33
33
  return (React.createElement(InputContainer, { label: label, disabled: disabled, required: required, status: status, message: message, icon: icon, isLabelInline: displayStyle === 'inline', isIconInline: iconDisplayStyle === 'inline', className: className, style: style, inputId: id },
34
34
  React.createElement(Textarea, { disabled: disabled, className: textareaClassName, style: textareaStyle, required: required, id: id, ...textareaProps, ref: ref })));
35
35
  });
@@ -19,10 +19,9 @@ export const Menu = React.forwardRef((props, ref) => {
19
19
  return focusableItems.filter((i) => !focusableItems.some((p) => p.contains(i.parentElement)));
20
20
  }, []);
21
21
  React.useEffect(() => {
22
- var _a;
23
22
  const items = getFocusableNodes();
24
23
  if (focusedIndex != null) {
25
- (_a = items === null || items === void 0 ? void 0 : items[focusedIndex]) === null || _a === void 0 ? void 0 : _a.focus();
24
+ items?.[focusedIndex]?.focus();
26
25
  return;
27
26
  }
28
27
  const selectedIndex = items.findIndex((el) => el.getAttribute('aria-selected') === 'true');
@@ -35,10 +34,10 @@ export const Menu = React.forwardRef((props, ref) => {
35
34
  return;
36
35
  }
37
36
  const items = getFocusableNodes();
38
- if (!(items === null || items === void 0 ? void 0 : items.length)) {
37
+ if (!items?.length) {
39
38
  return;
40
39
  }
41
- const currentIndex = focusedIndex !== null && focusedIndex !== void 0 ? focusedIndex : 0;
40
+ const currentIndex = focusedIndex ?? 0;
42
41
  switch (event.key) {
43
42
  case 'ArrowDown': {
44
43
  setFocusedIndex(Math.min(currentIndex + 1, items.length - 1));