carbon-react 142.13.1 → 142.13.2
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/esm/components/date/__internal__/date-picker/date-picker.component.d.ts +3 -1
- package/esm/components/date/__internal__/date-picker/date-picker.component.js +7 -2
- package/esm/components/date/date.component.d.ts +4 -0
- package/esm/components/date/date.component.js +21 -3
- package/esm/components/tabs/__internal__/tab-title/tab-title.component.js +2 -0
- package/esm/components/tabs/tabs.component.js +4 -1
- package/lib/components/date/__internal__/date-picker/date-picker.component.d.ts +3 -1
- package/lib/components/date/__internal__/date-picker/date-picker.component.js +7 -2
- package/lib/components/date/date.component.d.ts +4 -0
- package/lib/components/date/date.component.js +21 -3
- package/lib/components/tabs/__internal__/tab-title/tab-title.component.js +2 -0
- package/lib/components/tabs/tabs.component.js +4 -1
- package/package.json +1 -1
|
@@ -37,9 +37,11 @@ export interface DatePickerProps {
|
|
|
37
37
|
setOpen: (isOpen: boolean) => void;
|
|
38
38
|
/** Id passed to tab guard element */
|
|
39
39
|
pickerTabGuardId?: string;
|
|
40
|
+
/** Callback triggered when the picker is closed */
|
|
41
|
+
onPickerClose?: () => void;
|
|
40
42
|
}
|
|
41
43
|
export declare const DatePicker: {
|
|
42
|
-
({ inputElement, minDate, maxDate, selectedDays, disablePortal, onDayClick, pickerMouseDown, pickerProps, open, setOpen, pickerTabGuardId, }: DatePickerProps): React.JSX.Element | null;
|
|
44
|
+
({ inputElement, minDate, maxDate, selectedDays, disablePortal, onDayClick, pickerMouseDown, pickerProps, open, setOpen, pickerTabGuardId, onPickerClose, }: DatePickerProps): React.JSX.Element | null;
|
|
43
45
|
displayName: string;
|
|
44
46
|
};
|
|
45
47
|
export default DatePicker;
|
|
@@ -28,7 +28,8 @@ export const DatePicker = ({
|
|
|
28
28
|
pickerProps,
|
|
29
29
|
open,
|
|
30
30
|
setOpen,
|
|
31
|
-
pickerTabGuardId
|
|
31
|
+
pickerTabGuardId,
|
|
32
|
+
onPickerClose
|
|
32
33
|
}) => {
|
|
33
34
|
const locale = useLocale();
|
|
34
35
|
const {
|
|
@@ -96,6 +97,7 @@ export const DatePicker = ({
|
|
|
96
97
|
name
|
|
97
98
|
};
|
|
98
99
|
onDayClick?.(date, ev);
|
|
100
|
+
onPickerClose?.();
|
|
99
101
|
}
|
|
100
102
|
};
|
|
101
103
|
const handleKeyUp = useCallback(ev => {
|
|
@@ -103,14 +105,16 @@ export const DatePicker = ({
|
|
|
103
105
|
if (open && Events.isEscKey(ev)) {
|
|
104
106
|
inputElement.current?.querySelector("input")?.focus();
|
|
105
107
|
setOpen(false);
|
|
108
|
+
onPickerClose?.();
|
|
106
109
|
ev.stopPropagation();
|
|
107
110
|
}
|
|
108
|
-
}, [inputElement, open, setOpen]);
|
|
111
|
+
}, [inputElement, onPickerClose, open, setOpen]);
|
|
109
112
|
const handleOnKeyDown = ev => {
|
|
110
113
|
/* istanbul ignore else */
|
|
111
114
|
if (ref.current?.querySelector(".DayPicker-NavBar button") === document.activeElement && Events.isTabKey(ev) && Events.isShiftKey(ev)) {
|
|
112
115
|
ev.preventDefault();
|
|
113
116
|
setOpen(false);
|
|
117
|
+
onPickerClose?.();
|
|
114
118
|
inputElement.current?.querySelector("input")?.focus();
|
|
115
119
|
}
|
|
116
120
|
};
|
|
@@ -120,6 +124,7 @@ export const DatePicker = ({
|
|
|
120
124
|
if (Events.isTabKey(ev) && !Events.isShiftKey(ev)) {
|
|
121
125
|
ev.preventDefault();
|
|
122
126
|
setOpen(false);
|
|
127
|
+
onPickerClose?.();
|
|
123
128
|
const input = inputElement.current?.querySelector("input");
|
|
124
129
|
|
|
125
130
|
/* istanbul ignore else */
|
|
@@ -38,6 +38,10 @@ export interface DateInputProps extends Omit<TextboxProps, "value" | "formattedV
|
|
|
38
38
|
* Name passed from DateRange to allow it to know which input is updating
|
|
39
39
|
* */
|
|
40
40
|
inputName?: InputName;
|
|
41
|
+
/** Callback triggered when the picker is opened */
|
|
42
|
+
onPickerOpen?: () => void;
|
|
43
|
+
/** Callback triggered when the picker is closed */
|
|
44
|
+
onPickerClose?: () => void;
|
|
41
45
|
}
|
|
42
46
|
export declare const DateInput: React.ForwardRefExoticComponent<DateInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
43
47
|
export default DateInput;
|
|
@@ -39,6 +39,8 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
39
39
|
labelWidth,
|
|
40
40
|
maxWidth,
|
|
41
41
|
inputName,
|
|
42
|
+
onPickerClose,
|
|
43
|
+
onPickerOpen,
|
|
42
44
|
...rest
|
|
43
45
|
}, ref) => {
|
|
44
46
|
const wrapperRef = useRef(null);
|
|
@@ -102,6 +104,7 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
102
104
|
isBlurBlocked.current = false;
|
|
103
105
|
internalInputRef.current?.blur();
|
|
104
106
|
setOpen(false);
|
|
107
|
+
onPickerClose?.();
|
|
105
108
|
alreadyFocused.current = false;
|
|
106
109
|
}
|
|
107
110
|
} else {
|
|
@@ -180,6 +183,7 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
180
183
|
if (!open && !alreadyFocused.current) {
|
|
181
184
|
setTimeout(() => {
|
|
182
185
|
setOpen(true);
|
|
186
|
+
onPickerOpen?.();
|
|
183
187
|
}, 0);
|
|
184
188
|
} else {
|
|
185
189
|
alreadyFocused.current = false;
|
|
@@ -192,9 +196,10 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
192
196
|
/* istanbul ignore else */
|
|
193
197
|
if (open && Events.isEscKey(ev)) {
|
|
194
198
|
setOpen(false);
|
|
199
|
+
onPickerClose?.();
|
|
195
200
|
ev.stopPropagation();
|
|
196
201
|
}
|
|
197
|
-
}, [open]);
|
|
202
|
+
}, [onPickerClose, open]);
|
|
198
203
|
const handleKeyDown = ev => {
|
|
199
204
|
if (onKeyDown) {
|
|
200
205
|
onKeyDown(ev);
|
|
@@ -202,6 +207,7 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
202
207
|
if (open && Events.isTabKey(ev)) {
|
|
203
208
|
if (Events.isShiftKey(ev)) {
|
|
204
209
|
setOpen(false);
|
|
210
|
+
onPickerClose?.();
|
|
205
211
|
} else if (!disablePortal) {
|
|
206
212
|
ev.preventDefault();
|
|
207
213
|
document?.querySelector(`[id="${pickerTabGuardId.current}"]`)?.focus();
|
|
@@ -225,11 +231,20 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
225
231
|
if (type !== "text") {
|
|
226
232
|
alreadyFocused.current = true;
|
|
227
233
|
setTimeout(() => {
|
|
228
|
-
setOpen(prev =>
|
|
234
|
+
setOpen(prev => {
|
|
235
|
+
const nextState = !prev;
|
|
236
|
+
if (!nextState) {
|
|
237
|
+
onPickerClose?.();
|
|
238
|
+
} else {
|
|
239
|
+
onPickerOpen?.();
|
|
240
|
+
}
|
|
241
|
+
return nextState;
|
|
242
|
+
});
|
|
229
243
|
}, 0);
|
|
230
244
|
} else if (!open) {
|
|
231
245
|
setTimeout(() => {
|
|
232
246
|
setOpen(true);
|
|
247
|
+
onPickerOpen?.();
|
|
233
248
|
}, 0);
|
|
234
249
|
}
|
|
235
250
|
};
|
|
@@ -333,7 +348,8 @@ const DateInput = /*#__PURE__*/React.forwardRef(({
|
|
|
333
348
|
pickerMouseDown: handlePickerMouseDown,
|
|
334
349
|
open: open,
|
|
335
350
|
setOpen: setOpen,
|
|
336
|
-
pickerTabGuardId: pickerTabGuardId.current
|
|
351
|
+
pickerTabGuardId: pickerTabGuardId.current,
|
|
352
|
+
onPickerClose: onPickerClose
|
|
337
353
|
}));
|
|
338
354
|
});
|
|
339
355
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -719,6 +735,8 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
719
735
|
"onPasteCapture": PropTypes.func,
|
|
720
736
|
"onPause": PropTypes.func,
|
|
721
737
|
"onPauseCapture": PropTypes.func,
|
|
738
|
+
"onPickerClose": PropTypes.func,
|
|
739
|
+
"onPickerOpen": PropTypes.func,
|
|
722
740
|
"onPlay": PropTypes.func,
|
|
723
741
|
"onPlayCapture": PropTypes.func,
|
|
724
742
|
"onPlaying": PropTypes.func,
|
|
@@ -107,6 +107,7 @@ const TabTitle = /*#__PURE__*/React.forwardRef(({
|
|
|
107
107
|
return titlePosition === "before" ? [titleText, titleSiblings] : [titleSiblings, titleText];
|
|
108
108
|
};
|
|
109
109
|
const titleChildren = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledTitleContent, {
|
|
110
|
+
"data-role": "tab-title-content",
|
|
110
111
|
error: error,
|
|
111
112
|
warning: warning,
|
|
112
113
|
info: info,
|
|
@@ -137,6 +138,7 @@ const TabTitle = /*#__PURE__*/React.forwardRef(({
|
|
|
137
138
|
info: infoMessage
|
|
138
139
|
}))), !(hasFailedValidation || hasAlternateStyling) && isTabSelected && /*#__PURE__*/React.createElement(StyledSelectedIndicator, {
|
|
139
140
|
"data-element": "tab-selected-indicator",
|
|
141
|
+
"data-role": "tab-selected-indicator",
|
|
140
142
|
position: position
|
|
141
143
|
}));
|
|
142
144
|
const titleWrapperProps = {
|
|
@@ -102,6 +102,8 @@ const Tabs = ({
|
|
|
102
102
|
|
|
103
103
|
/** Handles the changing of tabs with the mouse */
|
|
104
104
|
const handleTabClick = ev => {
|
|
105
|
+
// istanbul ignore if
|
|
106
|
+
// (code doesn't seem to be ever reached - FE-6835 raised to investigate and hopefully remove this)
|
|
105
107
|
if (Event.isEventType(ev, "keydown")) {
|
|
106
108
|
return;
|
|
107
109
|
}
|
|
@@ -256,7 +258,8 @@ const Tabs = ({
|
|
|
256
258
|
};
|
|
257
259
|
return /*#__PURE__*/React.createElement(StyledTabs, _extends({
|
|
258
260
|
className: className,
|
|
259
|
-
position: isInSidebar ? "left" : position
|
|
261
|
+
position: isInSidebar ? "left" : position,
|
|
262
|
+
"data-role": "tabs"
|
|
260
263
|
}, tagComponent("tabs", rest), {
|
|
261
264
|
isInSidebar: isInSidebar,
|
|
262
265
|
headerWidth: headerWidth
|
|
@@ -37,9 +37,11 @@ export interface DatePickerProps {
|
|
|
37
37
|
setOpen: (isOpen: boolean) => void;
|
|
38
38
|
/** Id passed to tab guard element */
|
|
39
39
|
pickerTabGuardId?: string;
|
|
40
|
+
/** Callback triggered when the picker is closed */
|
|
41
|
+
onPickerClose?: () => void;
|
|
40
42
|
}
|
|
41
43
|
export declare const DatePicker: {
|
|
42
|
-
({ inputElement, minDate, maxDate, selectedDays, disablePortal, onDayClick, pickerMouseDown, pickerProps, open, setOpen, pickerTabGuardId, }: DatePickerProps): React.JSX.Element | null;
|
|
44
|
+
({ inputElement, minDate, maxDate, selectedDays, disablePortal, onDayClick, pickerMouseDown, pickerProps, open, setOpen, pickerTabGuardId, onPickerClose, }: DatePickerProps): React.JSX.Element | null;
|
|
43
45
|
displayName: string;
|
|
44
46
|
};
|
|
45
47
|
export default DatePicker;
|
|
@@ -36,7 +36,8 @@ const DatePicker = ({
|
|
|
36
36
|
pickerProps,
|
|
37
37
|
open,
|
|
38
38
|
setOpen,
|
|
39
|
-
pickerTabGuardId
|
|
39
|
+
pickerTabGuardId,
|
|
40
|
+
onPickerClose
|
|
40
41
|
}) => {
|
|
41
42
|
const locale = (0, _useLocale.default)();
|
|
42
43
|
const {
|
|
@@ -104,6 +105,7 @@ const DatePicker = ({
|
|
|
104
105
|
name
|
|
105
106
|
};
|
|
106
107
|
onDayClick?.(date, ev);
|
|
108
|
+
onPickerClose?.();
|
|
107
109
|
}
|
|
108
110
|
};
|
|
109
111
|
const handleKeyUp = (0, _react.useCallback)(ev => {
|
|
@@ -111,14 +113,16 @@ const DatePicker = ({
|
|
|
111
113
|
if (open && _events.default.isEscKey(ev)) {
|
|
112
114
|
inputElement.current?.querySelector("input")?.focus();
|
|
113
115
|
setOpen(false);
|
|
116
|
+
onPickerClose?.();
|
|
114
117
|
ev.stopPropagation();
|
|
115
118
|
}
|
|
116
|
-
}, [inputElement, open, setOpen]);
|
|
119
|
+
}, [inputElement, onPickerClose, open, setOpen]);
|
|
117
120
|
const handleOnKeyDown = ev => {
|
|
118
121
|
/* istanbul ignore else */
|
|
119
122
|
if (ref.current?.querySelector(".DayPicker-NavBar button") === document.activeElement && _events.default.isTabKey(ev) && _events.default.isShiftKey(ev)) {
|
|
120
123
|
ev.preventDefault();
|
|
121
124
|
setOpen(false);
|
|
125
|
+
onPickerClose?.();
|
|
122
126
|
inputElement.current?.querySelector("input")?.focus();
|
|
123
127
|
}
|
|
124
128
|
};
|
|
@@ -128,6 +132,7 @@ const DatePicker = ({
|
|
|
128
132
|
if (_events.default.isTabKey(ev) && !_events.default.isShiftKey(ev)) {
|
|
129
133
|
ev.preventDefault();
|
|
130
134
|
setOpen(false);
|
|
135
|
+
onPickerClose?.();
|
|
131
136
|
const input = inputElement.current?.querySelector("input");
|
|
132
137
|
|
|
133
138
|
/* istanbul ignore else */
|
|
@@ -38,6 +38,10 @@ export interface DateInputProps extends Omit<TextboxProps, "value" | "formattedV
|
|
|
38
38
|
* Name passed from DateRange to allow it to know which input is updating
|
|
39
39
|
* */
|
|
40
40
|
inputName?: InputName;
|
|
41
|
+
/** Callback triggered when the picker is opened */
|
|
42
|
+
onPickerOpen?: () => void;
|
|
43
|
+
/** Callback triggered when the picker is closed */
|
|
44
|
+
onPickerClose?: () => void;
|
|
41
45
|
}
|
|
42
46
|
export declare const DateInput: React.ForwardRefExoticComponent<DateInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
43
47
|
export default DateInput;
|
|
@@ -48,6 +48,8 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
48
48
|
labelWidth,
|
|
49
49
|
maxWidth,
|
|
50
50
|
inputName,
|
|
51
|
+
onPickerClose,
|
|
52
|
+
onPickerOpen,
|
|
51
53
|
...rest
|
|
52
54
|
}, ref) => {
|
|
53
55
|
const wrapperRef = (0, _react.useRef)(null);
|
|
@@ -111,6 +113,7 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
111
113
|
isBlurBlocked.current = false;
|
|
112
114
|
internalInputRef.current?.blur();
|
|
113
115
|
setOpen(false);
|
|
116
|
+
onPickerClose?.();
|
|
114
117
|
alreadyFocused.current = false;
|
|
115
118
|
}
|
|
116
119
|
} else {
|
|
@@ -189,6 +192,7 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
189
192
|
if (!open && !alreadyFocused.current) {
|
|
190
193
|
setTimeout(() => {
|
|
191
194
|
setOpen(true);
|
|
195
|
+
onPickerOpen?.();
|
|
192
196
|
}, 0);
|
|
193
197
|
} else {
|
|
194
198
|
alreadyFocused.current = false;
|
|
@@ -201,9 +205,10 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
201
205
|
/* istanbul ignore else */
|
|
202
206
|
if (open && _events.default.isEscKey(ev)) {
|
|
203
207
|
setOpen(false);
|
|
208
|
+
onPickerClose?.();
|
|
204
209
|
ev.stopPropagation();
|
|
205
210
|
}
|
|
206
|
-
}, [open]);
|
|
211
|
+
}, [onPickerClose, open]);
|
|
207
212
|
const handleKeyDown = ev => {
|
|
208
213
|
if (onKeyDown) {
|
|
209
214
|
onKeyDown(ev);
|
|
@@ -211,6 +216,7 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
211
216
|
if (open && _events.default.isTabKey(ev)) {
|
|
212
217
|
if (_events.default.isShiftKey(ev)) {
|
|
213
218
|
setOpen(false);
|
|
219
|
+
onPickerClose?.();
|
|
214
220
|
} else if (!disablePortal) {
|
|
215
221
|
ev.preventDefault();
|
|
216
222
|
document?.querySelector(`[id="${pickerTabGuardId.current}"]`)?.focus();
|
|
@@ -234,11 +240,20 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
234
240
|
if (type !== "text") {
|
|
235
241
|
alreadyFocused.current = true;
|
|
236
242
|
setTimeout(() => {
|
|
237
|
-
setOpen(prev =>
|
|
243
|
+
setOpen(prev => {
|
|
244
|
+
const nextState = !prev;
|
|
245
|
+
if (!nextState) {
|
|
246
|
+
onPickerClose?.();
|
|
247
|
+
} else {
|
|
248
|
+
onPickerOpen?.();
|
|
249
|
+
}
|
|
250
|
+
return nextState;
|
|
251
|
+
});
|
|
238
252
|
}, 0);
|
|
239
253
|
} else if (!open) {
|
|
240
254
|
setTimeout(() => {
|
|
241
255
|
setOpen(true);
|
|
256
|
+
onPickerOpen?.();
|
|
242
257
|
}, 0);
|
|
243
258
|
}
|
|
244
259
|
};
|
|
@@ -342,7 +357,8 @@ const DateInput = exports.DateInput = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
342
357
|
pickerMouseDown: handlePickerMouseDown,
|
|
343
358
|
open: open,
|
|
344
359
|
setOpen: setOpen,
|
|
345
|
-
pickerTabGuardId: pickerTabGuardId.current
|
|
360
|
+
pickerTabGuardId: pickerTabGuardId.current,
|
|
361
|
+
onPickerClose: onPickerClose
|
|
346
362
|
}));
|
|
347
363
|
});
|
|
348
364
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -728,6 +744,8 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
728
744
|
"onPasteCapture": _propTypes.default.func,
|
|
729
745
|
"onPause": _propTypes.default.func,
|
|
730
746
|
"onPauseCapture": _propTypes.default.func,
|
|
747
|
+
"onPickerClose": _propTypes.default.func,
|
|
748
|
+
"onPickerOpen": _propTypes.default.func,
|
|
731
749
|
"onPlay": _propTypes.default.func,
|
|
732
750
|
"onPlayCapture": _propTypes.default.func,
|
|
733
751
|
"onPlaying": _propTypes.default.func,
|
|
@@ -116,6 +116,7 @@ const TabTitle = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
116
116
|
return titlePosition === "before" ? [titleText, titleSiblings] : [titleSiblings, titleText];
|
|
117
117
|
};
|
|
118
118
|
const titleChildren = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_tabTitle.StyledTitleContent, {
|
|
119
|
+
"data-role": "tab-title-content",
|
|
119
120
|
error: error,
|
|
120
121
|
warning: warning,
|
|
121
122
|
info: info,
|
|
@@ -146,6 +147,7 @@ const TabTitle = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
146
147
|
info: infoMessage
|
|
147
148
|
}))), !(hasFailedValidation || hasAlternateStyling) && isTabSelected && /*#__PURE__*/_react.default.createElement(_tabTitle.StyledSelectedIndicator, {
|
|
148
149
|
"data-element": "tab-selected-indicator",
|
|
150
|
+
"data-role": "tab-selected-indicator",
|
|
149
151
|
position: position
|
|
150
152
|
}));
|
|
151
153
|
const titleWrapperProps = {
|
|
@@ -117,6 +117,8 @@ const Tabs = ({
|
|
|
117
117
|
|
|
118
118
|
/** Handles the changing of tabs with the mouse */
|
|
119
119
|
const handleTabClick = ev => {
|
|
120
|
+
// istanbul ignore if
|
|
121
|
+
// (code doesn't seem to be ever reached - FE-6835 raised to investigate and hopefully remove this)
|
|
120
122
|
if (_events.default.isEventType(ev, "keydown")) {
|
|
121
123
|
return;
|
|
122
124
|
}
|
|
@@ -271,7 +273,8 @@ const Tabs = ({
|
|
|
271
273
|
};
|
|
272
274
|
return /*#__PURE__*/_react.default.createElement(_tabs.default, _extends({
|
|
273
275
|
className: className,
|
|
274
|
-
position: isInSidebar ? "left" : position
|
|
276
|
+
position: isInSidebar ? "left" : position,
|
|
277
|
+
"data-role": "tabs"
|
|
275
278
|
}, (0, _tags.default)("tabs", rest), {
|
|
276
279
|
isInSidebar: isInSidebar,
|
|
277
280
|
headerWidth: headerWidth
|