@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.
- package/CHANGELOG.md +25 -0
- package/cjs/core/Alert/Alert.d.ts +47 -28
- package/cjs/core/Alert/Alert.js +73 -21
- package/cjs/core/Avatar/Avatar.js +1 -1
- package/cjs/core/AvatarGroup/AvatarGroup.js +1 -1
- package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/cjs/core/ButtonGroup/ButtonGroup.js +1 -4
- package/cjs/core/Buttons/DropdownButton/DropdownButton.js +3 -5
- package/cjs/core/Carousel/Carousel.d.ts +2 -2
- package/cjs/core/Carousel/Carousel.js +3 -5
- package/cjs/core/Carousel/CarouselDotsList.js +8 -10
- package/cjs/core/Carousel/CarouselNavigation.d.ts +2 -2
- package/cjs/core/Carousel/CarouselNavigation.js +3 -5
- package/cjs/core/Carousel/CarouselSlider.js +10 -15
- package/cjs/core/ColorPicker/ColorBuilder.js +7 -10
- package/cjs/core/ColorPicker/ColorInputPanel.js +12 -15
- package/cjs/core/ColorPicker/ColorPalette.js +4 -6
- package/cjs/core/ColorPicker/ColorPicker.js +3 -3
- package/cjs/core/ComboBox/ComboBox.js +25 -32
- package/cjs/core/ComboBox/ComboBoxDropdown.js +1 -2
- package/cjs/core/ComboBox/ComboBoxEndIcon.js +1 -1
- package/cjs/core/ComboBox/ComboBoxInput.js +21 -20
- package/cjs/core/ComboBox/ComboBoxMenu.js +3 -4
- package/cjs/core/ComboBox/ComboBoxMenuItem.js +2 -2
- package/cjs/core/ComboBox/helpers.js +4 -5
- package/cjs/core/DatePicker/DatePicker.js +32 -32
- package/cjs/core/Dialog/Dialog.js +11 -4
- package/cjs/core/Dialog/DialogBackdrop.js +1 -1
- package/cjs/core/Dialog/DialogContext.d.ts +11 -0
- package/cjs/core/Dialog/DialogMain.js +16 -22
- package/cjs/core/DropdownMenu/DropdownMenu.js +6 -8
- package/cjs/core/ExpandableBlock/ExpandableBlock.js +2 -2
- package/cjs/core/FileUpload/FileEmptyCard.js +1 -1
- package/cjs/core/FileUpload/FileUpload.d.ts +3 -4
- package/cjs/core/FileUpload/FileUpload.js +5 -8
- package/cjs/core/FileUpload/FileUploadCard.js +9 -10
- package/cjs/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/cjs/core/FileUpload/FileUploadTemplate.js +1 -0
- package/cjs/core/InformationPanel/InformationPanel.js +1 -4
- package/cjs/core/LabeledInput/LabeledInput.js +1 -1
- package/cjs/core/LabeledTextarea/LabeledTextarea.js +1 -1
- package/cjs/core/Menu/Menu.js +3 -4
- package/cjs/core/Menu/MenuItem.js +8 -11
- package/cjs/core/Modal/Modal.d.ts +8 -9
- package/cjs/core/Modal/Modal.js +7 -17
- package/cjs/core/SearchBox/SearchBox.js +12 -12
- package/cjs/core/Select/Select.js +12 -17
- package/cjs/core/SideNavigation/SideNavigation.js +2 -2
- package/cjs/core/Slider/Slider.js +16 -19
- package/cjs/core/Slider/Thumb.js +1 -1
- package/cjs/core/StatusMessage/StatusMessage.js +1 -1
- package/cjs/core/Stepper/Stepper.js +1 -1
- package/cjs/core/Stepper/StepperStep.js +1 -1
- package/cjs/core/Table/Table.js +15 -15
- package/cjs/core/Table/TablePaginator.js +2 -3
- package/cjs/core/Table/TableRowMemoized.js +38 -45
- package/cjs/core/Table/actionHandlers/expandHandler.js +3 -3
- package/cjs/core/Table/actionHandlers/filterHandler.js +4 -5
- package/cjs/core/Table/actionHandlers/selectHandler.js +6 -6
- package/cjs/core/Table/cells/DefaultCell.js +1 -1
- package/cjs/core/Table/cells/EditableCell.js +6 -12
- package/cjs/core/Table/columns/actionColumn.js +3 -6
- package/cjs/core/Table/columns/expanderColumn.js +3 -3
- package/cjs/core/Table/columns/selectionColumn.js +4 -4
- package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
- package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
- package/cjs/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
- package/cjs/core/Table/filters/TextFilter/TextFilter.js +1 -2
- package/cjs/core/Table/hooks/useResizeColumns.js +16 -22
- package/cjs/core/Table/hooks/useScrollToRow.js +1 -2
- package/cjs/core/Table/hooks/useStickyColumns.js +3 -5
- package/cjs/core/Table/hooks/useSubRowFiltering.js +2 -4
- package/cjs/core/Tabs/Tabs.js +13 -16
- package/cjs/core/ThemeProvider/ThemeContext.d.ts +1 -1
- package/cjs/core/ThemeProvider/ThemeProvider.d.ts +2 -3
- package/cjs/core/ThemeProvider/ThemeProvider.js +14 -13
- package/cjs/core/Tile/Tile.js +2 -3
- package/cjs/core/TimePicker/TimePicker.js +13 -13
- package/cjs/core/Toast/Toast.d.ts +5 -10
- package/cjs/core/Toast/Toast.js +17 -16
- package/cjs/core/Toast/Toaster.d.ts +24 -26
- package/cjs/core/Toast/Toaster.js +91 -121
- package/cjs/core/Toast/index.d.ts +1 -4
- package/cjs/core/Toast/index.js +3 -6
- package/cjs/core/TransferList/TransferList.js +3 -4
- package/cjs/core/Tree/Tree.js +9 -13
- package/cjs/core/Tree/TreeNode.js +9 -10
- package/cjs/core/index.d.ts +1 -2
- package/cjs/core/index.js +2 -5
- package/cjs/core/utils/color/ColorValue.js +9 -15
- package/cjs/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
- package/cjs/core/utils/components/FocusTrap.js +4 -4
- package/cjs/core/utils/components/MiddleTextTruncation.js +1 -2
- package/cjs/core/utils/components/Popover.d.ts +1 -1
- package/cjs/core/utils/components/Popover.js +5 -8
- package/cjs/core/utils/components/Resizer.js +7 -6
- package/cjs/core/utils/components/VirtualScroll.js +14 -21
- package/cjs/core/utils/functions/dom.d.ts +0 -8
- package/cjs/core/utils/functions/dom.js +3 -26
- package/cjs/core/utils/functions/polymorphic.d.ts +1 -1
- package/cjs/core/utils/functions/polymorphic.js +1 -1
- package/cjs/core/utils/functions/supports.js +1 -1
- package/cjs/core/utils/hooks/index.d.ts +0 -1
- package/cjs/core/utils/hooks/index.js +0 -1
- package/cjs/core/utils/hooks/useContainerWidth.js +1 -1
- package/cjs/core/utils/hooks/useDragAndDrop.js +8 -10
- package/cjs/core/utils/hooks/useEventListener.js +1 -1
- package/cjs/core/utils/hooks/useGlobals.d.ts +9 -2
- package/cjs/core/utils/hooks/useGlobals.js +6 -4
- package/cjs/core/utils/hooks/useId.js +1 -2
- package/cjs/core/utils/hooks/useIntersection.js +2 -3
- package/cjs/core/utils/hooks/useMediaQuery.js +6 -8
- package/cjs/core/utils/hooks/useOverflow.js +1 -2
- package/cjs/core/utils/hooks/useResizeObserver.js +3 -4
- package/cjs/styles.js +1 -4
- package/esm/core/Alert/Alert.d.ts +47 -28
- package/esm/core/Alert/Alert.js +74 -22
- package/esm/core/Avatar/Avatar.js +1 -1
- package/esm/core/AvatarGroup/AvatarGroup.js +1 -1
- package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/esm/core/ButtonGroup/ButtonGroup.js +1 -4
- package/esm/core/Buttons/DropdownButton/DropdownButton.js +3 -5
- package/esm/core/Carousel/Carousel.d.ts +2 -2
- package/esm/core/Carousel/Carousel.js +3 -5
- package/esm/core/Carousel/CarouselDotsList.js +8 -10
- package/esm/core/Carousel/CarouselNavigation.d.ts +2 -2
- package/esm/core/Carousel/CarouselNavigation.js +3 -5
- package/esm/core/Carousel/CarouselSlider.js +10 -15
- package/esm/core/ColorPicker/ColorBuilder.js +7 -10
- package/esm/core/ColorPicker/ColorInputPanel.js +12 -15
- package/esm/core/ColorPicker/ColorPalette.js +4 -6
- package/esm/core/ColorPicker/ColorPicker.js +3 -3
- package/esm/core/ComboBox/ComboBox.js +25 -32
- package/esm/core/ComboBox/ComboBoxDropdown.js +1 -2
- package/esm/core/ComboBox/ComboBoxEndIcon.js +1 -1
- package/esm/core/ComboBox/ComboBoxInput.js +21 -20
- package/esm/core/ComboBox/ComboBoxMenu.js +3 -4
- package/esm/core/ComboBox/ComboBoxMenuItem.js +2 -2
- package/esm/core/ComboBox/helpers.js +4 -5
- package/esm/core/DatePicker/DatePicker.js +32 -32
- package/esm/core/Dialog/Dialog.js +12 -5
- package/esm/core/Dialog/DialogBackdrop.js +1 -1
- package/esm/core/Dialog/DialogContext.d.ts +11 -0
- package/esm/core/Dialog/DialogMain.js +16 -22
- package/esm/core/DropdownMenu/DropdownMenu.js +6 -8
- package/esm/core/ExpandableBlock/ExpandableBlock.js +2 -2
- package/esm/core/FileUpload/FileEmptyCard.js +1 -1
- package/esm/core/FileUpload/FileUpload.d.ts +3 -4
- package/esm/core/FileUpload/FileUpload.js +5 -8
- package/esm/core/FileUpload/FileUploadCard.js +9 -10
- package/esm/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/esm/core/FileUpload/FileUploadTemplate.js +1 -0
- package/esm/core/InformationPanel/InformationPanel.js +1 -4
- package/esm/core/LabeledInput/LabeledInput.js +1 -1
- package/esm/core/LabeledTextarea/LabeledTextarea.js +1 -1
- package/esm/core/Menu/Menu.js +3 -4
- package/esm/core/Menu/MenuItem.js +8 -11
- package/esm/core/Modal/Modal.d.ts +8 -9
- package/esm/core/Modal/Modal.js +3 -10
- package/esm/core/SearchBox/SearchBox.js +12 -12
- package/esm/core/Select/Select.js +12 -17
- package/esm/core/SideNavigation/SideNavigation.js +2 -2
- package/esm/core/Slider/Slider.js +16 -19
- package/esm/core/Slider/Thumb.js +1 -1
- package/esm/core/StatusMessage/StatusMessage.js +1 -1
- package/esm/core/Stepper/Stepper.js +1 -1
- package/esm/core/Stepper/StepperStep.js +1 -1
- package/esm/core/Table/Table.js +15 -15
- package/esm/core/Table/TablePaginator.js +2 -3
- package/esm/core/Table/TableRowMemoized.js +38 -45
- package/esm/core/Table/actionHandlers/expandHandler.js +3 -3
- package/esm/core/Table/actionHandlers/filterHandler.js +4 -5
- package/esm/core/Table/actionHandlers/selectHandler.js +6 -6
- package/esm/core/Table/cells/DefaultCell.js +1 -1
- package/esm/core/Table/cells/EditableCell.js +6 -12
- package/esm/core/Table/columns/actionColumn.js +3 -6
- package/esm/core/Table/columns/expanderColumn.js +3 -3
- package/esm/core/Table/columns/selectionColumn.js +4 -4
- package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
- package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
- package/esm/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
- package/esm/core/Table/filters/TextFilter/TextFilter.js +1 -2
- package/esm/core/Table/hooks/useResizeColumns.js +16 -22
- package/esm/core/Table/hooks/useScrollToRow.js +1 -2
- package/esm/core/Table/hooks/useStickyColumns.js +3 -5
- package/esm/core/Table/hooks/useSubRowFiltering.js +2 -4
- package/esm/core/Tabs/Tabs.js +13 -16
- package/esm/core/ThemeProvider/ThemeContext.d.ts +1 -1
- package/esm/core/ThemeProvider/ThemeProvider.d.ts +2 -3
- package/esm/core/ThemeProvider/ThemeProvider.js +15 -14
- package/esm/core/Tile/Tile.js +2 -3
- package/esm/core/TimePicker/TimePicker.js +13 -13
- package/esm/core/Toast/Toast.d.ts +5 -10
- package/esm/core/Toast/Toast.js +18 -17
- package/esm/core/Toast/Toaster.d.ts +24 -26
- package/esm/core/Toast/Toaster.js +85 -121
- package/esm/core/Toast/index.d.ts +1 -4
- package/esm/core/Toast/index.js +1 -3
- package/esm/core/TransferList/TransferList.js +3 -4
- package/esm/core/Tree/Tree.js +9 -13
- package/esm/core/Tree/TreeNode.js +9 -10
- package/esm/core/index.d.ts +1 -2
- package/esm/core/index.js +1 -1
- package/esm/core/utils/color/ColorValue.js +9 -15
- package/esm/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
- package/esm/core/utils/components/FocusTrap.js +4 -4
- package/esm/core/utils/components/MiddleTextTruncation.js +1 -2
- package/esm/core/utils/components/Popover.d.ts +1 -1
- package/esm/core/utils/components/Popover.js +5 -8
- package/esm/core/utils/components/Resizer.js +7 -6
- package/esm/core/utils/components/VirtualScroll.js +14 -21
- package/esm/core/utils/functions/dom.d.ts +0 -8
- package/esm/core/utils/functions/dom.js +2 -21
- package/esm/core/utils/functions/polymorphic.d.ts +1 -1
- package/esm/core/utils/functions/polymorphic.js +1 -1
- package/esm/core/utils/functions/supports.js +1 -1
- package/esm/core/utils/hooks/index.d.ts +0 -1
- package/esm/core/utils/hooks/index.js +0 -1
- package/esm/core/utils/hooks/useContainerWidth.js +1 -1
- package/esm/core/utils/hooks/useDragAndDrop.js +8 -10
- package/esm/core/utils/hooks/useEventListener.js +1 -1
- package/esm/core/utils/hooks/useGlobals.d.ts +9 -2
- package/esm/core/utils/hooks/useGlobals.js +6 -4
- package/esm/core/utils/hooks/useId.js +1 -2
- package/esm/core/utils/hooks/useIntersection.js +2 -3
- package/esm/core/utils/hooks/useMediaQuery.js +6 -8
- package/esm/core/utils/hooks/useOverflow.js +1 -2
- package/esm/core/utils/hooks/useResizeObserver.js +3 -4
- package/esm/styles.js +1 -4
- package/package.json +2 -2
- package/styles.css +19 -20
- package/cjs/core/Toast/ToastWrapper.d.ts +0 -10
- package/cjs/core/Toast/ToastWrapper.js +0 -49
- package/cjs/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
- package/cjs/core/utils/hooks/useIsThemeAlreadySet.js +0 -54
- package/esm/core/Toast/ToastWrapper.d.ts +0 -10
- package/esm/core/Toast/ToastWrapper.js +0 -20
- package/esm/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
- package/esm/core/utils/hooks/useIsThemeAlreadySet.js +0 -27
|
@@ -140,17 +140,20 @@ exports.generateLocalizedStrings = generateLocalizedStrings;
|
|
|
140
140
|
* <DatePicker date={new Date()} onChange={(e) => console.log('New date value: ' + e)} />
|
|
141
141
|
*/
|
|
142
142
|
exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
143
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
144
143
|
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;
|
|
145
|
-
const monthNames =
|
|
146
|
-
const shortDays =
|
|
147
|
-
const longDays =
|
|
144
|
+
const monthNames = localizedNames?.months ?? defaultMonths;
|
|
145
|
+
const shortDays = localizedNames?.shortDays ?? defaultShortDays;
|
|
146
|
+
const longDays = localizedNames?.days ?? defaultLongDays;
|
|
148
147
|
const [selectedDay, setSelectedDay] = React.useState(date);
|
|
149
148
|
const [selectedStartDay, setSelectedStartDay] = React.useState(startDate);
|
|
150
149
|
const [selectedEndDay, setSelectedEndDay] = React.useState(endDate);
|
|
151
|
-
const [focusedDay, setFocusedDay] = React.useState(
|
|
152
|
-
const [displayedMonthIndex, setDisplayedMonthIndex] = React.useState(
|
|
153
|
-
|
|
150
|
+
const [focusedDay, setFocusedDay] = React.useState(selectedStartDay ?? selectedDay ?? new Date());
|
|
151
|
+
const [displayedMonthIndex, setDisplayedMonthIndex] = React.useState(selectedStartDay?.getMonth() ??
|
|
152
|
+
selectedDay?.getMonth() ??
|
|
153
|
+
new Date().getMonth());
|
|
154
|
+
const [displayedYear, setDisplayedYear] = React.useState(selectedStartDay?.getFullYear() ??
|
|
155
|
+
selectedDay?.getFullYear() ??
|
|
156
|
+
new Date().getFullYear());
|
|
154
157
|
// boolean that toggles between the user picking the start date and end date for date range
|
|
155
158
|
const [isSelectingStartDate, setIsSelectingStartDate] = React.useState(true);
|
|
156
159
|
// Used to focus days only when days are changed
|
|
@@ -166,15 +169,16 @@ exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
|
166
169
|
setDisplayedYear(newYear);
|
|
167
170
|
}, []);
|
|
168
171
|
React.useEffect(() => {
|
|
169
|
-
var _a, _b, _c, _d;
|
|
170
172
|
const currentDate = new Date();
|
|
171
173
|
setSelectedDay(date);
|
|
172
174
|
setSelectedStartDay(startDate);
|
|
173
175
|
setSelectedEndDay(endDate);
|
|
174
176
|
if (!enableRangeSelect) {
|
|
175
|
-
setFocusedDay(date
|
|
177
|
+
setFocusedDay(date ?? currentDate);
|
|
176
178
|
}
|
|
177
|
-
setMonthAndYear(
|
|
179
|
+
setMonthAndYear(startDate?.getMonth() ?? date?.getMonth() ?? currentDate.getMonth(), startDate?.getFullYear() ??
|
|
180
|
+
date?.getFullYear() ??
|
|
181
|
+
currentDate.getFullYear());
|
|
178
182
|
}, [date, setMonthAndYear, startDate, endDate, enableRangeSelect]);
|
|
179
183
|
const days = React.useMemo(() => {
|
|
180
184
|
let offsetToFirst = new Date(displayedYear, displayedMonthIndex, 1).getDay();
|
|
@@ -199,8 +203,7 @@ exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
|
199
203
|
return weeksInMonth;
|
|
200
204
|
}, [days]);
|
|
201
205
|
const getNewFocusedDate = (newYear, newMonth) => {
|
|
202
|
-
|
|
203
|
-
const currentDate = (_a = selectedStartDay !== null && selectedStartDay !== void 0 ? selectedStartDay : selectedDay) !== null && _a !== void 0 ? _a : new Date();
|
|
206
|
+
const currentDate = selectedStartDay ?? selectedDay ?? new Date();
|
|
204
207
|
const newDate = new Date(newYear, newMonth, currentDate.getDate(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds());
|
|
205
208
|
return newDate;
|
|
206
209
|
};
|
|
@@ -229,51 +232,51 @@ exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
|
229
232
|
const onDayClick = (day) => {
|
|
230
233
|
// single date selection
|
|
231
234
|
if (!enableRangeSelect) {
|
|
232
|
-
if (day.getMonth() !==
|
|
235
|
+
if (day.getMonth() !== selectedDay?.getMonth()) {
|
|
233
236
|
setMonthAndYear(day.getMonth(), day.getFullYear());
|
|
234
237
|
}
|
|
235
|
-
const currentDate = selectedDay
|
|
238
|
+
const currentDate = selectedDay ?? new Date();
|
|
236
239
|
const newDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds());
|
|
237
240
|
setSelectedDay(newDate);
|
|
238
241
|
setFocusedDay(newDate);
|
|
239
|
-
isSingleOnChange(onChange, enableRangeSelect) &&
|
|
242
|
+
isSingleOnChange(onChange, enableRangeSelect) && onChange?.(newDate);
|
|
240
243
|
}
|
|
241
244
|
// start date selection (date range only)
|
|
242
245
|
else if (isSelectingStartDate) {
|
|
243
|
-
if (day.getMonth() !==
|
|
246
|
+
if (day.getMonth() !== selectedStartDay?.getMonth()) {
|
|
244
247
|
setMonthAndYear(day.getMonth(), day.getFullYear());
|
|
245
248
|
}
|
|
246
|
-
const currentStartDate = selectedStartDay
|
|
249
|
+
const currentStartDate = selectedStartDay ?? new Date();
|
|
247
250
|
const newStartDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentStartDate.getHours(), currentStartDate.getMinutes(), currentStartDate.getSeconds());
|
|
248
251
|
setSelectedStartDay(newStartDate);
|
|
249
252
|
setFocusedDay(newStartDate);
|
|
250
253
|
// if the start date is after the end date or the end date is undefined, reset the end date
|
|
251
254
|
if (!(0, index_js_1.isBefore)(newStartDate, selectedEndDay)) {
|
|
252
255
|
setSelectedEndDay(newStartDate);
|
|
253
|
-
onChange
|
|
256
|
+
onChange?.(newStartDate, newStartDate);
|
|
254
257
|
}
|
|
255
258
|
else {
|
|
256
|
-
selectedEndDay &&
|
|
259
|
+
selectedEndDay && onChange?.(newStartDate, selectedEndDay);
|
|
257
260
|
}
|
|
258
261
|
setIsSelectingStartDate(false);
|
|
259
262
|
}
|
|
260
263
|
// end date selection (date range only)
|
|
261
264
|
else {
|
|
262
|
-
if (day.getMonth() !==
|
|
265
|
+
if (day.getMonth() !== selectedEndDay?.getMonth()) {
|
|
263
266
|
setMonthAndYear(day.getMonth(), day.getFullYear());
|
|
264
267
|
}
|
|
265
|
-
const currentEndDate = selectedEndDay
|
|
268
|
+
const currentEndDate = selectedEndDay ?? new Date();
|
|
266
269
|
const newEndDate = new Date(day.getFullYear(), day.getMonth(), day.getDate(), currentEndDate.getHours(), currentEndDate.getMinutes(), currentEndDate.getSeconds());
|
|
267
270
|
setFocusedDay(newEndDate);
|
|
268
271
|
// if the end date is before the start date, move back the start date and still have user select end date
|
|
269
272
|
if (!(0, index_js_1.isBefore)(newEndDate, selectedStartDay)) {
|
|
270
273
|
setSelectedEndDay(newEndDate);
|
|
271
|
-
selectedStartDay &&
|
|
274
|
+
selectedStartDay && onChange?.(selectedStartDay, newEndDate);
|
|
272
275
|
setIsSelectingStartDate(true);
|
|
273
276
|
}
|
|
274
277
|
else {
|
|
275
278
|
setSelectedStartDay(newEndDate);
|
|
276
|
-
selectedEndDay &&
|
|
279
|
+
selectedEndDay && onChange?.(newEndDate, selectedEndDay);
|
|
277
280
|
}
|
|
278
281
|
}
|
|
279
282
|
};
|
|
@@ -325,7 +328,7 @@ exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
|
325
328
|
case 'Enter':
|
|
326
329
|
case ' ':
|
|
327
330
|
case 'Spacebar':
|
|
328
|
-
if (!
|
|
331
|
+
if (!isDateDisabled?.(focusedDay)) {
|
|
329
332
|
onDayClick(focusedDay);
|
|
330
333
|
}
|
|
331
334
|
event.preventDefault();
|
|
@@ -378,17 +381,14 @@ exports.DatePicker = React.forwardRef((props, forwardedRef) => {
|
|
|
378
381
|
React.createElement("div", { onKeyDown: handleCalendarKeyDown, role: 'listbox' }, weeks.map((weekDays, weekIndex) => {
|
|
379
382
|
return (React.createElement(index_js_1.Box, { key: `week-${displayedMonthIndex}-${weekIndex}`, className: 'iui-calendar-week' }, weekDays.map((weekDay, dayIndex) => {
|
|
380
383
|
const dateValue = weekDay.getDate();
|
|
381
|
-
const isDisabled = isDateDisabled
|
|
384
|
+
const isDisabled = isDateDisabled?.(weekDay);
|
|
382
385
|
return (React.createElement(index_js_1.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) &&
|
|
383
386
|
needFocus.current &&
|
|
384
|
-
|
|
387
|
+
element?.focus() }, dateValue));
|
|
385
388
|
})));
|
|
386
389
|
}))),
|
|
387
|
-
showTime && (React.createElement(index_js_3.TimePicker, { date: selectedStartDay
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
? onChange === null || onChange === void 0 ? void 0 : onChange(date)
|
|
391
|
-
: 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()));
|
|
392
|
-
} }))));
|
|
390
|
+
showTime && (React.createElement(index_js_3.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)
|
|
391
|
+
? onChange?.(date)
|
|
392
|
+
: 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())) }))));
|
|
393
393
|
});
|
|
394
394
|
exports.default = exports.DatePicker;
|
|
@@ -32,6 +32,7 @@ exports.Dialog = void 0;
|
|
|
32
32
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
33
33
|
*--------------------------------------------------------------------------------------------*/
|
|
34
34
|
const React = __importStar(require("react"));
|
|
35
|
+
const ReactDOM = __importStar(require("react-dom"));
|
|
35
36
|
const classnames_1 = __importDefault(require("classnames"));
|
|
36
37
|
const DialogTitleBar_js_1 = require("./DialogTitleBar.js");
|
|
37
38
|
const DialogContent_js_1 = require("./DialogContent.js");
|
|
@@ -41,9 +42,16 @@ const DialogButtonBar_js_1 = require("./DialogButtonBar.js");
|
|
|
41
42
|
const DialogMain_js_1 = require("./DialogMain.js");
|
|
42
43
|
const index_js_1 = require("../utils/index.js");
|
|
43
44
|
const DialogComponent = React.forwardRef((props, ref) => {
|
|
44
|
-
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;
|
|
45
|
+
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;
|
|
45
46
|
const dialogRootRef = React.useRef(null);
|
|
46
|
-
const
|
|
47
|
+
const context = (0, index_js_1.useGlobals)();
|
|
48
|
+
const isClient = (0, index_js_1.useIsClient)();
|
|
49
|
+
const portalTo = typeof portal !== 'boolean'
|
|
50
|
+
? portal.to
|
|
51
|
+
: portal
|
|
52
|
+
? context?.portalContainerRef?.current ?? (0, index_js_1.getDocument)()?.body
|
|
53
|
+
: null;
|
|
54
|
+
const dialog = (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-dialog-wrapper', className), "data-iui-relative": relativeTo === 'container', ref: (0, index_js_1.useMergedRefs)(ref, dialogRootRef), ...rest }));
|
|
47
55
|
return (React.createElement(DialogContext_js_1.DialogContext.Provider, { value: {
|
|
48
56
|
isOpen,
|
|
49
57
|
onClose,
|
|
@@ -58,8 +66,7 @@ const DialogComponent = React.forwardRef((props, ref) => {
|
|
|
58
66
|
relativeTo,
|
|
59
67
|
dialogRootRef,
|
|
60
68
|
placement,
|
|
61
|
-
} },
|
|
62
|
-
React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-dialog-wrapper', className), "data-iui-relative": relativeTo === 'container', ref: refs, ...rest })));
|
|
69
|
+
} }, portalTo && isClient ? ReactDOM.createPortal(dialog, portalTo) : dialog));
|
|
63
70
|
});
|
|
64
71
|
/**
|
|
65
72
|
* Dialog component.
|
|
@@ -56,7 +56,7 @@ exports.DialogBackdrop = React.forwardRef((props, ref) => {
|
|
|
56
56
|
if (isDismissible && closeOnExternalClick && onClose) {
|
|
57
57
|
onClose(event);
|
|
58
58
|
}
|
|
59
|
-
onMouseDown
|
|
59
|
+
onMouseDown?.(event);
|
|
60
60
|
};
|
|
61
61
|
return (React.createElement(index_js_1.Backdrop, { isVisible: isVisible, className: (0, classnames_1.default)({ 'iui-backdrop-fixed': relativeTo === 'viewport' }, className), ref: refs, onMouseDown: handleMouseDown, style: {
|
|
62
62
|
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
|
*/
|
|
@@ -74,8 +74,7 @@ exports.DialogMain = React.forwardRef((props, ref) => {
|
|
|
74
74
|
}, [isOpen]);
|
|
75
75
|
// Prevents document from scrolling when the dialog is open.
|
|
76
76
|
React.useEffect(() => {
|
|
77
|
-
|
|
78
|
-
const ownerDocument = (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument;
|
|
77
|
+
const ownerDocument = dialogRef.current?.ownerDocument;
|
|
79
78
|
// If there is no `ownerDocument` or `preventDocumentScroll` is false or
|
|
80
79
|
// document body originally has `overflow: hidden` (possibly from other/parent dialog), then do nothing.
|
|
81
80
|
if (!ownerDocument ||
|
|
@@ -102,7 +101,7 @@ exports.DialogMain = React.forwardRef((props, ref) => {
|
|
|
102
101
|
if (isDismissible && closeOnEsc && event.key === 'Escape' && onClose) {
|
|
103
102
|
onClose(event);
|
|
104
103
|
}
|
|
105
|
-
onKeyDown
|
|
104
|
+
onKeyDown?.(event);
|
|
106
105
|
};
|
|
107
106
|
const { onPointerDown, transform } = (0, useDragAndDrop_js_1.default)(dialogRef, dialogContext.dialogRootRef, isDraggable);
|
|
108
107
|
const handlePointerDown = React.useCallback((event) => {
|
|
@@ -112,23 +111,19 @@ exports.DialogMain = React.forwardRef((props, ref) => {
|
|
|
112
111
|
}, [isDraggable, onPointerDown]);
|
|
113
112
|
// Prevents dialog from moving when window is being resized
|
|
114
113
|
(0, index_js_1.useIsomorphicLayoutEffect)(() => {
|
|
115
|
-
var _a;
|
|
116
114
|
if (!isDraggable || !isOpen) {
|
|
117
115
|
return;
|
|
118
116
|
}
|
|
119
|
-
const rect =
|
|
117
|
+
const rect = dialogRef.current?.getBoundingClientRect();
|
|
120
118
|
const [translateX, translateY] = (0, index_js_1.getTranslateValues)(dialogRef.current);
|
|
121
|
-
setStyle((oldStyle) => {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
transform: `translate(${translateX}px,${translateY}px)`,
|
|
130
|
-
});
|
|
131
|
-
});
|
|
119
|
+
setStyle((oldStyle) => ({
|
|
120
|
+
...oldStyle,
|
|
121
|
+
width: rect?.width,
|
|
122
|
+
height: rect?.height,
|
|
123
|
+
left: dialogRef.current?.offsetLeft,
|
|
124
|
+
top: dialogRef.current?.offsetTop,
|
|
125
|
+
transform: `translate(${translateX}px,${translateY}px)`,
|
|
126
|
+
}));
|
|
132
127
|
}, [isDraggable, isOpen]);
|
|
133
128
|
const setResizeStyle = React.useCallback((newStyle) => {
|
|
134
129
|
setStyle((oldStyle) => ({
|
|
@@ -160,15 +155,14 @@ exports.DialogMain = React.forwardRef((props, ref) => {
|
|
|
160
155
|
}, timeout: { exit: 600 },
|
|
161
156
|
// Focuses dialog when opened
|
|
162
157
|
onEntered: () => {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
setFocus &&
|
|
158
|
+
previousFocusedElement.current = dialogRef.current?.ownerDocument
|
|
159
|
+
.activeElement;
|
|
160
|
+
setFocus && dialogRef.current?.focus({ preventScroll: true });
|
|
166
161
|
},
|
|
167
162
|
// Brings back focus to the previously focused element when closed
|
|
168
163
|
onExit: () => {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
(_c = previousFocusedElement.current) === null || _c === void 0 ? void 0 : _c.focus();
|
|
164
|
+
if (dialogRef.current?.contains(dialogRef.current?.ownerDocument.activeElement)) {
|
|
165
|
+
previousFocusedElement.current?.focus();
|
|
172
166
|
}
|
|
173
167
|
}, unmountOnExit: true, nodeRef: dialogRef },
|
|
174
168
|
React.createElement(DialogDragContext_js_1.DialogDragContext.Provider, { value: { onPointerDown: handlePointerDown } },
|
|
@@ -52,29 +52,27 @@ const index_js_2 = require("../Menu/index.js");
|
|
|
52
52
|
*/
|
|
53
53
|
const DropdownMenu = (props) => {
|
|
54
54
|
const { menuItems, children, className, style, role = 'menu', visible, placement = 'bottom-start', onShow, onHide, trigger, id, ...rest } = props;
|
|
55
|
-
const [isVisible, setIsVisible] = React.useState(visible
|
|
55
|
+
const [isVisible, setIsVisible] = React.useState(visible ?? false);
|
|
56
56
|
React.useEffect(() => {
|
|
57
|
-
setIsVisible(visible
|
|
57
|
+
setIsVisible(visible ?? false);
|
|
58
58
|
}, [visible]);
|
|
59
59
|
const open = React.useCallback(() => setIsVisible(true), []);
|
|
60
60
|
const close = React.useCallback(() => setIsVisible(false), []);
|
|
61
61
|
const targetRef = React.useRef(null);
|
|
62
62
|
const onShowHandler = React.useCallback((instance) => {
|
|
63
63
|
setIsVisible(true);
|
|
64
|
-
onShow
|
|
64
|
+
onShow?.(instance);
|
|
65
65
|
}, [onShow]);
|
|
66
66
|
const onHideHandler = React.useCallback((instance) => {
|
|
67
|
-
var _a;
|
|
68
67
|
setIsVisible(false);
|
|
69
|
-
|
|
70
|
-
onHide
|
|
68
|
+
targetRef.current?.focus();
|
|
69
|
+
onHide?.(instance);
|
|
71
70
|
}, [onHide]);
|
|
72
71
|
return (React.createElement(index_js_1.Popover, { content: React.createElement(index_js_2.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, {
|
|
73
72
|
ref: (0, index_js_1.mergeRefs)(targetRef, props.children.ref),
|
|
74
73
|
onClick: (args) => {
|
|
75
|
-
var _a, _b;
|
|
76
74
|
trigger === undefined && (isVisible ? close() : open());
|
|
77
|
-
|
|
75
|
+
children.props.onClick?.(args);
|
|
78
76
|
},
|
|
79
77
|
})));
|
|
80
78
|
};
|
|
@@ -45,7 +45,7 @@ const index_js_1 = require("../utils/index.js");
|
|
|
45
45
|
*/
|
|
46
46
|
exports.ExpandableBlock = React.forwardRef((props, ref) => {
|
|
47
47
|
const { caption, children, className, title, onToggle, style, isExpanded = false, endIcon, status, size = 'default', styleType = 'default', disabled = false, ...rest } = props;
|
|
48
|
-
const icon = endIcon
|
|
48
|
+
const icon = endIcon ?? (status && index_js_1.StatusIconMap[status]());
|
|
49
49
|
const [expanded, setExpanded] = React.useState(isExpanded);
|
|
50
50
|
React.useEffect(() => {
|
|
51
51
|
setExpanded(isExpanded);
|
|
@@ -55,7 +55,7 @@ exports.ExpandableBlock = React.forwardRef((props, ref) => {
|
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
setExpanded(!expanded);
|
|
58
|
-
onToggle
|
|
58
|
+
onToggle?.(!expanded);
|
|
59
59
|
};
|
|
60
60
|
const onKeyDown = (event) => {
|
|
61
61
|
if (event.altKey || disabled) {
|
|
@@ -47,7 +47,7 @@ const FileEmptyCardText = index_js_1.polymorphic.span('iui-file-card-empty-actio
|
|
|
47
47
|
// FileEmptyCard component
|
|
48
48
|
const FileEmptyCardComponent = React.forwardRef((props, ref) => {
|
|
49
49
|
const { children, className, ...rest } = props;
|
|
50
|
-
return (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-file-card-empty', className), ref: ref, ...rest }, children
|
|
50
|
+
return (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-file-card-empty', className), ref: ref, ...rest }, children ?? (React.createElement(React.Fragment, null,
|
|
51
51
|
React.createElement(exports.FileEmptyCard.Icon, null),
|
|
52
52
|
React.createElement(exports.FileEmptyCard.Text, null,
|
|
53
53
|
React.createElement(FileUploadCard_js_1.default.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 `
|
|
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 `
|
|
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}><
|
|
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>;
|
|
@@ -35,10 +35,10 @@ const React = __importStar(require("react"));
|
|
|
35
35
|
const classnames_1 = __importDefault(require("classnames"));
|
|
36
36
|
const index_js_1 = require("../utils/index.js");
|
|
37
37
|
/**
|
|
38
|
-
* File upload component to be wrapped around `
|
|
38
|
+
* File upload component to be wrapped around `FileUploadCard` or any arbitrary component.
|
|
39
39
|
* Provides support for dragging and dropping multiple files.
|
|
40
40
|
* @example
|
|
41
|
-
* <FileUpload onFileDropped={console.log}><
|
|
41
|
+
* <FileUpload onFileDropped={console.log}><FileUploadCard /></FileUpload>
|
|
42
42
|
* <FileUpload dragContent='Drop file here' onFileDropped={console.log}><Textarea /></FileUpload>
|
|
43
43
|
*/
|
|
44
44
|
exports.FileUpload = React.forwardRef((props, ref) => {
|
|
@@ -51,31 +51,28 @@ exports.FileUpload = React.forwardRef((props, ref) => {
|
|
|
51
51
|
e.stopPropagation();
|
|
52
52
|
};
|
|
53
53
|
const onDragEnterHandler = (e) => {
|
|
54
|
-
var _a, _b, _c;
|
|
55
54
|
e.preventDefault();
|
|
56
55
|
e.stopPropagation();
|
|
57
56
|
// only set active if a file is dragged over
|
|
58
|
-
if (!isDragActive &&
|
|
57
|
+
if (!isDragActive && e.dataTransfer?.items?.[0]?.kind === 'file') {
|
|
59
58
|
setIsDragActive(true);
|
|
60
59
|
}
|
|
61
60
|
};
|
|
62
61
|
const onDragLeaveHandler = (e) => {
|
|
63
|
-
var _a;
|
|
64
62
|
e.preventDefault();
|
|
65
63
|
e.stopPropagation();
|
|
66
64
|
// only set inactive if secondary target is outside the component
|
|
67
65
|
if (isDragActive &&
|
|
68
|
-
!
|
|
66
|
+
!fileUploadRef.current?.contains(e.relatedTarget)) {
|
|
69
67
|
setIsDragActive(false);
|
|
70
68
|
}
|
|
71
69
|
};
|
|
72
70
|
const onDropHandler = (e) => {
|
|
73
|
-
var _a;
|
|
74
71
|
e.preventDefault();
|
|
75
72
|
e.stopPropagation();
|
|
76
73
|
if (isDragActive) {
|
|
77
74
|
setIsDragActive(false);
|
|
78
|
-
onFileDropped(
|
|
75
|
+
onFileDropped(e.dataTransfer?.files);
|
|
79
76
|
}
|
|
80
77
|
};
|
|
81
78
|
return (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-file-upload', { 'iui-drag': isDragActive }, className), onDragEnter: onDragEnterHandler, onDragOver: onDragOverHandler, onDragLeave: onDragLeaveHandler, onDrop: onDropHandler, ref: refs, ...rest },
|
|
@@ -64,7 +64,7 @@ const FileUploadCardTitle = React.forwardRef((props, ref) => {
|
|
|
64
64
|
const { children, className, ...rest } = props;
|
|
65
65
|
const { files } = (0, index_js_1.useSafeContext)(exports.FileUploadCardContext);
|
|
66
66
|
const title = files.length > 1 ? files.length + ' files selected' : files[0].name;
|
|
67
|
-
return (React.createElement(index_js_1.Box, { as: 'span', className: (0, classnames_1.default)('iui-file-card-title', className), ref: ref, ...rest }, children
|
|
67
|
+
return (React.createElement(index_js_1.Box, { as: 'span', className: (0, classnames_1.default)('iui-file-card-title', className), ref: ref, ...rest }, children ?? title));
|
|
68
68
|
});
|
|
69
69
|
FileUploadCardTitle.displayName = 'FileUploadCard.Title';
|
|
70
70
|
// ----------------------------------------------------------------------------
|
|
@@ -78,7 +78,7 @@ const FileUploadCardDescription = React.forwardRef((props, ref) => {
|
|
|
78
78
|
if (files.length > 2) {
|
|
79
79
|
description += ', and ' + (files.length - 2) + ' others';
|
|
80
80
|
}
|
|
81
|
-
return (React.createElement(index_js_1.Box, { as: 'span', className: (0, classnames_1.default)('iui-file-card-description', className), ref: ref, ...rest }, children
|
|
81
|
+
return (React.createElement(index_js_1.Box, { as: 'span', className: (0, classnames_1.default)('iui-file-card-description', className), ref: ref, ...rest }, children ?? description));
|
|
82
82
|
});
|
|
83
83
|
FileUploadCardDescription.displayName = 'FileUploadCard.Description';
|
|
84
84
|
// ----------------------------------------------------------------------------
|
|
@@ -99,8 +99,7 @@ const FileUploadCardInput = React.forwardRef((props, ref) => {
|
|
|
99
99
|
const { children, onChange, id, ...rest } = props;
|
|
100
100
|
const { files, onFilesChange, setInternalFiles, inputId, setInputId } = (0, index_js_1.useSafeContext)(exports.FileUploadCardContext);
|
|
101
101
|
const setNativeFilesRef = React.useCallback((node) => {
|
|
102
|
-
|
|
103
|
-
if (!node || !((_a = (0, index_js_1.getWindow)()) === null || _a === void 0 ? void 0 : _a.DataTransfer)) {
|
|
102
|
+
if (!node || !(0, index_js_1.getWindow)()?.DataTransfer) {
|
|
104
103
|
return;
|
|
105
104
|
}
|
|
106
105
|
const dataTransfer = new DataTransfer();
|
|
@@ -117,19 +116,18 @@ const FileUploadCardInput = React.forwardRef((props, ref) => {
|
|
|
117
116
|
return (React.createElement(React.Fragment, null,
|
|
118
117
|
React.createElement(index_js_1.VisuallyHidden, { as: 'input', type: 'file', unhideOnFocus: false, onChange: (0, index_js_1.mergeEventHandlers)(onChange, (e) => {
|
|
119
118
|
const _files = Array.from(e.currentTarget.files || []);
|
|
120
|
-
onFilesChange
|
|
119
|
+
onFilesChange?.(_files);
|
|
121
120
|
setInternalFiles(_files);
|
|
122
|
-
}), ref: refs, id: id
|
|
121
|
+
}), ref: refs, id: id ?? inputId, ...rest }),
|
|
123
122
|
children));
|
|
124
123
|
});
|
|
125
124
|
FileUploadCardInput.displayName = 'FileUploadCard.Input';
|
|
126
125
|
const FileUploadCardComponent = React.forwardRef((props, ref) => {
|
|
127
|
-
var _a;
|
|
128
126
|
const { className, children, files: filesProp, onFilesChange, emptyCard = React.createElement(FileEmptyCard_js_1.FileEmptyCard, null), input, ...rest } = props;
|
|
129
127
|
const [internalFiles, setInternalFiles] = React.useState();
|
|
130
128
|
const uid = (0, index_js_1.useId)();
|
|
131
129
|
const [inputId, setInputId] = React.useState(uid);
|
|
132
|
-
const files =
|
|
130
|
+
const files = filesProp ?? internalFiles ?? [];
|
|
133
131
|
return (React.createElement(exports.FileUploadCardContext.Provider, { value: {
|
|
134
132
|
files,
|
|
135
133
|
onFilesChange,
|
|
@@ -137,13 +135,14 @@ const FileUploadCardComponent = React.forwardRef((props, ref) => {
|
|
|
137
135
|
inputId,
|
|
138
136
|
setInputId,
|
|
139
137
|
} },
|
|
140
|
-
|
|
138
|
+
files?.length ? (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-file-card', className), ref: ref, ...rest }, children ?? (React.createElement(React.Fragment, null,
|
|
141
139
|
React.createElement(exports.FileUploadCard.Icon, null),
|
|
142
140
|
React.createElement(exports.FileUploadCard.Info, null,
|
|
143
141
|
React.createElement(exports.FileUploadCard.Title, null),
|
|
144
142
|
React.createElement(exports.FileUploadCard.Description, null)),
|
|
145
143
|
React.createElement(exports.FileUploadCard.Action, null,
|
|
146
|
-
React.createElement(exports.FileUploadCard.InputLabel, null, "Replace")))))) : (emptyCard),
|
|
144
|
+
React.createElement(exports.FileUploadCard.InputLabel, null, "Replace")))))) : (emptyCard),
|
|
145
|
+
input ?? React.createElement(exports.FileUploadCard.Input, null)));
|
|
147
146
|
});
|
|
148
147
|
/**
|
|
149
148
|
* 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
|
|
@@ -36,6 +36,7 @@ const classnames_1 = __importDefault(require("classnames"));
|
|
|
36
36
|
const index_js_1 = require("../utils/index.js");
|
|
37
37
|
const Anchor_js_1 = require("../Typography/Anchor/Anchor.js");
|
|
38
38
|
/**
|
|
39
|
+
* @deprecated Use `FileUploadCard` instead.
|
|
39
40
|
* Default template to be used with the `FileUpload` wrapper component.
|
|
40
41
|
* Contains a hidden input with styled labels (customizable).
|
|
41
42
|
* @example
|
|
@@ -69,10 +69,7 @@ exports.InformationPanel = React.forwardRef((props, ref) => {
|
|
|
69
69
|
e.preventDefault();
|
|
70
70
|
e.stopPropagation();
|
|
71
71
|
infoPanelRef.current.ownerDocument.addEventListener('pointermove', onResize);
|
|
72
|
-
infoPanelRef.current.ownerDocument.addEventListener('pointerup', () => {
|
|
73
|
-
var _a;
|
|
74
|
-
return (_a = infoPanelRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.removeEventListener('pointermove', onResize);
|
|
75
|
-
}, { once: true });
|
|
72
|
+
infoPanelRef.current.ownerDocument.addEventListener('pointerup', () => infoPanelRef.current?.ownerDocument.removeEventListener('pointermove', onResize), { once: true });
|
|
76
73
|
};
|
|
77
74
|
const onResize = React.useCallback((e) => {
|
|
78
75
|
e.preventDefault();
|
|
@@ -42,7 +42,7 @@ const index_js_1 = require("../utils/index.js");
|
|
|
42
42
|
exports.LabeledInput = React.forwardRef((props, ref) => {
|
|
43
43
|
const uid = (0, index_js_1.useId)();
|
|
44
44
|
const { className, disabled = false, label, message, status, svgIcon, style, inputClassName, inputStyle, displayStyle = 'default', iconDisplayStyle = displayStyle === 'default' ? 'block' : 'inline', required = false, id = uid, ...rest } = props;
|
|
45
|
-
const icon = svgIcon
|
|
45
|
+
const icon = svgIcon ?? (status && index_js_1.StatusIconMap[status]());
|
|
46
46
|
return (React.createElement(index_js_1.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 },
|
|
47
47
|
React.createElement(Input_js_1.Input, { disabled: disabled, className: inputClassName, style: inputStyle, required: required, ref: ref, id: id, ...rest })));
|
|
48
48
|
});
|
|
@@ -55,7 +55,7 @@ const index_js_2 = require("../Textarea/index.js");
|
|
|
55
55
|
exports.LabeledTextarea = React.forwardRef((props, ref) => {
|
|
56
56
|
const uid = (0, index_js_1.useId)();
|
|
57
57
|
const { className, style, disabled = false, label, message, status, textareaClassName, textareaStyle, displayStyle = 'default', iconDisplayStyle = displayStyle === 'default' ? 'block' : 'inline', svgIcon, required = false, id = uid, ...textareaProps } = props;
|
|
58
|
-
const icon = svgIcon
|
|
58
|
+
const icon = svgIcon ?? (status && index_js_1.StatusIconMap[status]());
|
|
59
59
|
return (React.createElement(index_js_1.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 },
|
|
60
60
|
React.createElement(index_js_2.Textarea, { disabled: disabled, className: textareaClassName, style: textareaStyle, required: required, id: id, ...textareaProps, ref: ref })));
|
|
61
61
|
});
|
package/cjs/core/Menu/Menu.js
CHANGED
|
@@ -48,10 +48,9 @@ exports.Menu = React.forwardRef((props, ref) => {
|
|
|
48
48
|
return focusableItems.filter((i) => !focusableItems.some((p) => p.contains(i.parentElement)));
|
|
49
49
|
}, []);
|
|
50
50
|
React.useEffect(() => {
|
|
51
|
-
var _a;
|
|
52
51
|
const items = getFocusableNodes();
|
|
53
52
|
if (focusedIndex != null) {
|
|
54
|
-
|
|
53
|
+
items?.[focusedIndex]?.focus();
|
|
55
54
|
return;
|
|
56
55
|
}
|
|
57
56
|
const selectedIndex = items.findIndex((el) => el.getAttribute('aria-selected') === 'true');
|
|
@@ -64,10 +63,10 @@ exports.Menu = React.forwardRef((props, ref) => {
|
|
|
64
63
|
return;
|
|
65
64
|
}
|
|
66
65
|
const items = getFocusableNodes();
|
|
67
|
-
if (!
|
|
66
|
+
if (!items?.length) {
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
|
-
const currentIndex = focusedIndex
|
|
69
|
+
const currentIndex = focusedIndex ?? 0;
|
|
71
70
|
switch (event.key) {
|
|
72
71
|
case 'ArrowDown': {
|
|
73
72
|
setFocusedIndex(Math.min(currentIndex + 1, items.length - 1));
|