@carbon/react 1.113.0 → 1.114.0
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/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +962 -962
- package/es/components/Card/Card.d.ts +48 -0
- package/es/components/Card/Card.js +148 -0
- package/es/components/Card/Card.types.d.ts +88 -0
- package/es/components/Card/CardAction.d.ts +37 -0
- package/es/components/Card/CardAction.js +32 -0
- package/es/components/Card/CardActions.d.ts +30 -0
- package/es/components/Card/CardActions.js +93 -0
- package/es/components/Card/CardBody.d.ts +11 -0
- package/es/components/Card/CardBody.js +34 -0
- package/es/components/Card/CardContext.d.ts +17 -0
- package/es/components/Card/CardContext.js +31 -0
- package/es/components/Card/CardFooter.d.ts +11 -0
- package/es/components/Card/CardFooter.js +34 -0
- package/es/components/Card/CardHeader.d.ts +11 -0
- package/es/components/Card/CardHeader.js +44 -0
- package/es/components/Card/CardHeaderMedia.d.ts +21 -0
- package/es/components/Card/CardHeaderMedia.js +24 -0
- package/es/components/Card/CardMedia.d.ts +35 -0
- package/es/components/Card/CardMedia.js +42 -0
- package/es/components/Card/CardTitle.d.ts +72 -0
- package/es/components/Card/CardTitle.js +86 -0
- package/es/components/Card/CardTitleMedia.d.ts +23 -0
- package/es/components/Card/CardTitleMedia.js +36 -0
- package/es/components/Card/_story-assets/data.d.ts +6 -0
- package/es/components/Card/_story-assets/options.d.ts +47 -0
- package/es/components/Card/index.d.ts +8 -0
- package/es/components/Card/index.js +33 -0
- package/es/components/Checkbox/Checkbox.js +1 -1
- package/es/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/es/components/ComboBox/ComboBox.js +2 -2
- package/es/components/ComboButton/index.js +1 -1
- package/es/components/ComposedModal/ComposedModal.js +1 -1
- package/es/components/DatePicker/DatePicker.d.ts +10 -0
- package/es/components/DatePicker/DatePicker.js +7 -6
- package/es/components/DatePicker/next/components/Calendar.d.ts +40 -0
- package/es/components/DatePicker/next/components/Calendar.js +181 -0
- package/es/components/DatePicker/next/components/DatePicker.d.ts +86 -0
- package/es/components/DatePicker/next/components/DatePicker.js +147 -0
- package/es/components/DatePicker/next/components/DatePickerInput.d.ts +143 -0
- package/es/components/DatePicker/next/components/DatePickerInput.js +124 -0
- package/es/components/DatePicker/next/components/DatePickerSkeleton.d.ts +22 -0
- package/es/components/DatePicker/next/components/DatePickerSkeleton.js +32 -0
- package/es/components/DatePicker/next/hooks/useDatePicker.d.ts +144 -0
- package/es/components/DatePicker/next/hooks/useDatePicker.js +286 -0
- package/es/components/DatePicker/next/index.d.ts +12 -0
- package/es/components/DatePicker/next/index.js +19 -0
- package/es/components/DatePickerInput/DatePickerInput.js +1 -1
- package/es/components/Dropdown/Dropdown.js +2 -2
- package/es/components/ExpandableSearch/ExpandableSearch.js +1 -1
- package/es/components/MenuButton/index.js +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +2 -2
- package/es/components/MultiSelect/MultiSelect.js +2 -2
- package/es/components/NumberInput/NumberInput.js +2 -2
- package/es/components/OverflowMenu/next/index.js +1 -1
- package/es/components/RadioButton/RadioButton.js +1 -1
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/es/components/Select/Select.js +1 -1
- package/es/components/Tag/SelectableTag.js +1 -1
- package/es/components/TextArea/TextArea.js +1 -1
- package/es/components/TextInput/TextInput.js +1 -1
- package/es/index.d.ts +2 -0
- package/es/index.js +7 -5
- package/es/internal/checkForOverflow.d.ts +5 -0
- package/es/internal/useFocus.d.ts +23 -0
- package/es/internal/usePrefersReducedMotion.d.ts +11 -0
- package/es/internal/useSidePanelPresence.d.ts +21 -0
- package/lib/components/Card/Card.d.ts +48 -0
- package/lib/components/Card/Card.js +161 -0
- package/lib/components/Card/Card.types.d.ts +88 -0
- package/lib/components/Card/CardAction.d.ts +37 -0
- package/lib/components/Card/CardAction.js +41 -0
- package/lib/components/Card/CardActions.d.ts +30 -0
- package/lib/components/Card/CardActions.js +96 -0
- package/lib/components/Card/CardBody.d.ts +11 -0
- package/lib/components/Card/CardBody.js +37 -0
- package/lib/components/Card/CardContext.d.ts +17 -0
- package/lib/components/Card/CardContext.js +32 -0
- package/lib/components/Card/CardFooter.d.ts +11 -0
- package/lib/components/Card/CardFooter.js +37 -0
- package/lib/components/Card/CardHeader.d.ts +11 -0
- package/lib/components/Card/CardHeader.js +47 -0
- package/lib/components/Card/CardHeaderMedia.d.ts +21 -0
- package/lib/components/Card/CardHeaderMedia.js +33 -0
- package/lib/components/Card/CardMedia.d.ts +35 -0
- package/lib/components/Card/CardMedia.js +51 -0
- package/lib/components/Card/CardTitle.d.ts +72 -0
- package/lib/components/Card/CardTitle.js +89 -0
- package/lib/components/Card/CardTitleMedia.d.ts +23 -0
- package/lib/components/Card/CardTitleMedia.js +39 -0
- package/lib/components/Card/_story-assets/data.d.ts +6 -0
- package/lib/components/Card/_story-assets/options.d.ts +47 -0
- package/lib/components/Card/index.d.ts +8 -0
- package/lib/components/Card/index.js +48 -0
- package/lib/components/Checkbox/Checkbox.js +1 -1
- package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/lib/components/ComboBox/ComboBox.js +2 -2
- package/lib/components/ComboButton/index.js +1 -1
- package/lib/components/ComposedModal/ComposedModal.js +1 -1
- package/lib/components/DatePicker/DatePicker.d.ts +10 -0
- package/lib/components/DatePicker/DatePicker.js +7 -6
- package/lib/components/DatePicker/next/components/Calendar.d.ts +40 -0
- package/lib/components/DatePicker/next/components/Calendar.js +184 -0
- package/lib/components/DatePicker/next/components/DatePicker.d.ts +86 -0
- package/lib/components/DatePicker/next/components/DatePicker.js +150 -0
- package/lib/components/DatePicker/next/components/DatePickerInput.d.ts +143 -0
- package/lib/components/DatePicker/next/components/DatePickerInput.js +127 -0
- package/lib/components/DatePicker/next/components/DatePickerSkeleton.d.ts +22 -0
- package/lib/components/DatePicker/next/components/DatePickerSkeleton.js +41 -0
- package/lib/components/DatePicker/next/hooks/useDatePicker.d.ts +144 -0
- package/lib/components/DatePicker/next/hooks/useDatePicker.js +286 -0
- package/lib/components/DatePicker/next/index.d.ts +12 -0
- package/lib/components/DatePicker/next/index.js +27 -0
- package/lib/components/DatePickerInput/DatePickerInput.js +1 -1
- package/lib/components/Dropdown/Dropdown.js +2 -2
- package/lib/components/ExpandableSearch/ExpandableSearch.js +1 -1
- package/lib/components/MenuButton/index.js +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +2 -2
- package/lib/components/MultiSelect/MultiSelect.js +2 -2
- package/lib/components/NumberInput/NumberInput.js +2 -2
- package/lib/components/OverflowMenu/next/index.js +1 -1
- package/lib/components/RadioButton/RadioButton.js +1 -1
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/lib/components/Select/Select.js +1 -1
- package/lib/components/Tag/SelectableTag.js +1 -1
- package/lib/components/TextArea/TextArea.js +1 -1
- package/lib/components/TextInput/TextInput.js +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +59 -45
- package/lib/internal/checkForOverflow.d.ts +5 -0
- package/lib/internal/useFocus.d.ts +23 -0
- package/lib/internal/usePrefersReducedMotion.d.ts +11 -0
- package/lib/internal/useSidePanelPresence.d.ts +21 -0
- package/package.json +11 -11
- package/scss/components/action-set/_action-set.scss +9 -0
- package/scss/components/action-set/_index.scss +9 -0
- package/scss/components/resizer/_index.scss +9 -0
- package/scss/components/resizer/_resizer.scss +9 -0
- package/scss/components/side-panel/_index.scss +9 -0
- package/scss/components/side-panel/_side-panel.scss +9 -0
- package/scss/components/truncated-text/_index.scss +9 -0
- package/scss/components/truncated-text/_truncated-text.scss +9 -0
- package/telemetry.yml +57 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
let react = require("react");
|
|
9
|
+
let _carbon_utilities_date_picker = require("@carbon/utilities/date-picker");
|
|
10
|
+
//#region src/components/DatePicker/next/hooks/useDatePicker.ts
|
|
11
|
+
/**
|
|
12
|
+
* Copyright IBM Corp. 2026
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
15
|
+
* LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* React hook for managing date picker state using the shared state machine
|
|
19
|
+
* Maintains 100% backwards compatibility with Carbon React v11 API
|
|
20
|
+
*
|
|
21
|
+
* @param {UseDatePickerConfig} config - Configuration options
|
|
22
|
+
* @returns {UseDatePickerReturn} Hook return object with state and handlers
|
|
23
|
+
*/
|
|
24
|
+
function useDatePicker(config = {}) {
|
|
25
|
+
const { datePickerType = "single", value = "", minDate = null, maxDate = null, dateFormat = "m/d/Y", closeOnSelect = true, disabled = false, readOnly = false, onChange, onOpen, onClose } = config;
|
|
26
|
+
const startInputRef = (0, react.useRef)(null);
|
|
27
|
+
const endInputRef = (0, react.useRef)(null);
|
|
28
|
+
const calendarRef = (0, react.useRef)(null);
|
|
29
|
+
const exitSentinelRef = (0, react.useRef)(null);
|
|
30
|
+
const machineRef = (0, react.useRef)(null);
|
|
31
|
+
const suppressOpenOnFocusRef = (0, react.useRef)(false);
|
|
32
|
+
const [context, setContext] = (0, react.useState)(() => {
|
|
33
|
+
const machine = new _carbon_utilities_date_picker.DatePickerStateMachine({
|
|
34
|
+
mode: datePickerType,
|
|
35
|
+
value,
|
|
36
|
+
minDate: (0, _carbon_utilities_date_picker.parseDateToPlainDate)(minDate),
|
|
37
|
+
maxDate: (0, _carbon_utilities_date_picker.parseDateToPlainDate)(maxDate),
|
|
38
|
+
dateFormat,
|
|
39
|
+
isDisabled: disabled,
|
|
40
|
+
isReadonly: readOnly
|
|
41
|
+
});
|
|
42
|
+
machineRef.current = machine;
|
|
43
|
+
return machine.getContext();
|
|
44
|
+
});
|
|
45
|
+
const [state, setState] = (0, react.useState)(() => {
|
|
46
|
+
return machineRef.current?.getState() || _carbon_utilities_date_picker.DatePickerState.IDLE;
|
|
47
|
+
});
|
|
48
|
+
(0, react.useEffect)(() => {
|
|
49
|
+
const machine = machineRef.current;
|
|
50
|
+
if (!machine) return;
|
|
51
|
+
let wasCalendarOpen = machine.getContext().isOpen;
|
|
52
|
+
return machine.subscribe((transition) => {
|
|
53
|
+
setContext(transition.context);
|
|
54
|
+
setState(transition.to);
|
|
55
|
+
if (transition.to === _carbon_utilities_date_picker.DatePickerState.CALENDAR_OPEN && onOpen) onOpen();
|
|
56
|
+
if (wasCalendarOpen && !transition.context.isOpen && onClose) onClose();
|
|
57
|
+
wasCalendarOpen = transition.context.isOpen;
|
|
58
|
+
});
|
|
59
|
+
}, [onOpen, onClose]);
|
|
60
|
+
(0, react.useEffect)(() => {
|
|
61
|
+
if (!context.shouldRestoreFocus) return;
|
|
62
|
+
const targetRef = context.restoreFocusTo === "to" ? endInputRef : startInputRef;
|
|
63
|
+
const timeoutId = window.setTimeout(() => {
|
|
64
|
+
suppressOpenOnFocusRef.current = true;
|
|
65
|
+
targetRef.current?.focus();
|
|
66
|
+
machineRef.current?.updateContext({
|
|
67
|
+
shouldRestoreFocus: false,
|
|
68
|
+
restoreFocusTo: null
|
|
69
|
+
});
|
|
70
|
+
setContext(machineRef.current.getContext());
|
|
71
|
+
queueMicrotask(() => {
|
|
72
|
+
suppressOpenOnFocusRef.current = false;
|
|
73
|
+
});
|
|
74
|
+
}, 0);
|
|
75
|
+
return () => {
|
|
76
|
+
window.clearTimeout(timeoutId);
|
|
77
|
+
};
|
|
78
|
+
}, [context.shouldRestoreFocus, context.restoreFocusTo]);
|
|
79
|
+
const prevDatesRef = (0, react.useRef)("");
|
|
80
|
+
(0, react.useEffect)(() => {
|
|
81
|
+
if (!onChange) return;
|
|
82
|
+
const dates = [];
|
|
83
|
+
if (context.startDate) {
|
|
84
|
+
const date = (0, _carbon_utilities_date_picker.plainDateToDate)(context.startDate);
|
|
85
|
+
if (date) dates.push(date);
|
|
86
|
+
}
|
|
87
|
+
if (context.endDate) {
|
|
88
|
+
const date = (0, _carbon_utilities_date_picker.plainDateToDate)(context.endDate);
|
|
89
|
+
if (date) dates.push(date);
|
|
90
|
+
}
|
|
91
|
+
const datesKey = dates.map((d) => d.toISOString()).join(",");
|
|
92
|
+
if (dates.length > 0 && datesKey !== prevDatesRef.current) {
|
|
93
|
+
prevDatesRef.current = datesKey;
|
|
94
|
+
onChange(dates);
|
|
95
|
+
}
|
|
96
|
+
}, [
|
|
97
|
+
context.startDate,
|
|
98
|
+
context.endDate,
|
|
99
|
+
onChange
|
|
100
|
+
]);
|
|
101
|
+
(0, react.useEffect)(() => {
|
|
102
|
+
const machine = machineRef.current;
|
|
103
|
+
if (!machine) return;
|
|
104
|
+
if (disabled !== context.isDisabled) machine.send(disabled ? _carbon_utilities_date_picker.DatePickerEvent.DISABLE : _carbon_utilities_date_picker.DatePickerEvent.ENABLE);
|
|
105
|
+
if (readOnly !== context.isReadonly) machine.send(readOnly ? _carbon_utilities_date_picker.DatePickerEvent.SET_READONLY : _carbon_utilities_date_picker.DatePickerEvent.UNSET_READONLY);
|
|
106
|
+
const newMinDate = (0, _carbon_utilities_date_picker.parseDateToPlainDate)(minDate);
|
|
107
|
+
const newMaxDate = (0, _carbon_utilities_date_picker.parseDateToPlainDate)(maxDate);
|
|
108
|
+
if (newMinDate) machine.send(_carbon_utilities_date_picker.DatePickerEvent.SET_MIN_DATE, { date: newMinDate });
|
|
109
|
+
if (newMaxDate) machine.send(_carbon_utilities_date_picker.DatePickerEvent.SET_MAX_DATE, { date: newMaxDate });
|
|
110
|
+
}, [
|
|
111
|
+
disabled,
|
|
112
|
+
readOnly,
|
|
113
|
+
minDate,
|
|
114
|
+
maxDate,
|
|
115
|
+
context.isDisabled,
|
|
116
|
+
context.isReadonly
|
|
117
|
+
]);
|
|
118
|
+
const send = (0, react.useCallback)((eventType, payload) => {
|
|
119
|
+
machineRef.current?.send(eventType, payload);
|
|
120
|
+
}, []);
|
|
121
|
+
const openCalendar = (0, react.useCallback)(() => {
|
|
122
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.CALENDAR_ICON_CLICK);
|
|
123
|
+
}, [send]);
|
|
124
|
+
const closeCalendar = (0, react.useCallback)(() => {
|
|
125
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.CALENDAR_CLOSE);
|
|
126
|
+
}, [send]);
|
|
127
|
+
const selectDate = (0, react.useCallback)((date) => {
|
|
128
|
+
if (datePickerType === "range") if (!context.startDate || context.endDate) send(_carbon_utilities_date_picker.DatePickerEvent.RANGE_START_SELECT, { date });
|
|
129
|
+
else {
|
|
130
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.RANGE_END_SELECT, { date });
|
|
131
|
+
if (closeOnSelect) send(_carbon_utilities_date_picker.DatePickerEvent.CALENDAR_CLOSE);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.DATE_SELECT, { date });
|
|
135
|
+
if (closeOnSelect) send(_carbon_utilities_date_picker.DatePickerEvent.CALENDAR_CLOSE);
|
|
136
|
+
}
|
|
137
|
+
}, [
|
|
138
|
+
closeOnSelect,
|
|
139
|
+
datePickerType,
|
|
140
|
+
context.startDate,
|
|
141
|
+
context.endDate,
|
|
142
|
+
send
|
|
143
|
+
]);
|
|
144
|
+
const handleInputFocus = (0, react.useCallback)((inputType = "from") => {
|
|
145
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.INPUT_FOCUS, { inputType });
|
|
146
|
+
if (suppressOpenOnFocusRef.current) return;
|
|
147
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.CALENDAR_OPEN);
|
|
148
|
+
}, [send]);
|
|
149
|
+
const handleInputBlur = (0, react.useCallback)(() => {
|
|
150
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.INPUT_BLUR);
|
|
151
|
+
}, [send]);
|
|
152
|
+
const handleInputChange = (0, react.useCallback)((value, inputType = "from") => {
|
|
153
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.VALUE_CHANGE, {
|
|
154
|
+
value,
|
|
155
|
+
inputType
|
|
156
|
+
});
|
|
157
|
+
}, [send]);
|
|
158
|
+
(0, react.useEffect)(() => {
|
|
159
|
+
if (!context.isOpen) return;
|
|
160
|
+
const handler = new _carbon_utilities_date_picker.ClickOutsideHandler({
|
|
161
|
+
isOpen: context.isOpen,
|
|
162
|
+
/**
|
|
163
|
+
* Check if a node is contained within the date picker elements
|
|
164
|
+
* @param {Node} node - The node to check
|
|
165
|
+
* @returns {boolean} True if the node is within the date picker
|
|
166
|
+
*/
|
|
167
|
+
containsNode: (node) => {
|
|
168
|
+
const calendarEl = calendarRef.current;
|
|
169
|
+
const startInputEl = startInputRef.current;
|
|
170
|
+
const endInputEl = endInputRef.current;
|
|
171
|
+
return (calendarEl?.contains(node) ?? false) || (startInputEl?.contains(node) ?? false) || (endInputEl?.contains(node) ?? false);
|
|
172
|
+
},
|
|
173
|
+
/**
|
|
174
|
+
* Handle clicks outside the date picker
|
|
175
|
+
*/
|
|
176
|
+
onOutsideClick: () => send(_carbon_utilities_date_picker.DatePickerEvent.OUTSIDE_CLICK),
|
|
177
|
+
useCapture: true,
|
|
178
|
+
attachDelay: 0
|
|
179
|
+
});
|
|
180
|
+
handler.attach();
|
|
181
|
+
return () => {
|
|
182
|
+
handler.detach();
|
|
183
|
+
};
|
|
184
|
+
}, [context.isOpen, send]);
|
|
185
|
+
(0, react.useEffect)(() => {
|
|
186
|
+
/**
|
|
187
|
+
* Handle keyboard events for calendar navigation
|
|
188
|
+
*
|
|
189
|
+
* @param {KeyboardEvent} event - Keyboard event
|
|
190
|
+
*/
|
|
191
|
+
const handleKeyDown = (event) => {
|
|
192
|
+
const { key } = event;
|
|
193
|
+
const target = event.target;
|
|
194
|
+
const calendarEl = calendarRef.current;
|
|
195
|
+
const startInputEl = startInputRef.current;
|
|
196
|
+
const endInputEl = endInputRef.current;
|
|
197
|
+
const isFocusInCalendar = calendarEl && (calendarEl.contains(target) || target === calendarEl || target.classList?.contains("cds--date-picker__calendar"));
|
|
198
|
+
const isFocusInInput = target === startInputEl || target === endInputEl || startInputEl && startInputEl.contains(target) || endInputEl && endInputEl.contains(target);
|
|
199
|
+
if (key === "Escape" && context.isOpen) {
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.ESCAPE_KEY);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (key === "Tab") {
|
|
205
|
+
if (isFocusInInput && !event.shiftKey) {
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
if (calendarEl) calendarEl.querySelector(".cds--date-picker__calendar")?.focus();
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (isFocusInCalendar && event.shiftKey) {
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
if (datePickerType === "range" && context.lastFocusedInput === "to" && endInputEl) endInputEl.focus();
|
|
213
|
+
else if (startInputEl) startInputEl.focus();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (isFocusInCalendar && !event.shiftKey) {
|
|
217
|
+
send(_carbon_utilities_date_picker.DatePickerEvent.TAB_KEY);
|
|
218
|
+
if (exitSentinelRef.current) exitSentinelRef.current.tabIndex = 0;
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (!context.isOpen) return;
|
|
224
|
+
if (!isFocusInCalendar || isFocusInInput) return;
|
|
225
|
+
const mappedEvent = (0, _carbon_utilities_date_picker.mapKeyboardToStateMachineEvent)({
|
|
226
|
+
key,
|
|
227
|
+
shiftKey: event.shiftKey,
|
|
228
|
+
mode: datePickerType,
|
|
229
|
+
state,
|
|
230
|
+
focusedDate: context.focusedDate
|
|
231
|
+
});
|
|
232
|
+
if (mappedEvent) {
|
|
233
|
+
if (mappedEvent.preventDefault) event.preventDefault();
|
|
234
|
+
if (mappedEvent.eventType) send(mappedEvent.eventType, mappedEvent.payload);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
239
|
+
return () => {
|
|
240
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
241
|
+
};
|
|
242
|
+
}, [
|
|
243
|
+
context.isOpen,
|
|
244
|
+
context.focusedDate,
|
|
245
|
+
context.lastFocusedInput,
|
|
246
|
+
state,
|
|
247
|
+
datePickerType,
|
|
248
|
+
send
|
|
249
|
+
]);
|
|
250
|
+
/**
|
|
251
|
+
* Called when the browser delivers focus to the exit sentinel.
|
|
252
|
+
* Closes the calendar (state machine already received TAB_KEY in _handleKeyDown)
|
|
253
|
+
* and immediately restores tabindex="-1" so future Tab presses skip the sentinel.
|
|
254
|
+
*
|
|
255
|
+
* TODO (carbon monorepo migration): replace this hand-rolled sentinel with the
|
|
256
|
+
* upstream Carbon wrapFocus utility, which implements the same start/end sentinel
|
|
257
|
+
* pattern for focus trapping and exit.
|
|
258
|
+
* Upstream location: packages/react/src/internal/wrapFocus.ts (wrapFocus /
|
|
259
|
+
* wrapFocusWithoutSentinels exports). Note that wrapFocus is designed to trap
|
|
260
|
+
* focus inside a container (modal pattern) rather than release it; the exit-only
|
|
261
|
+
* direction we need maps to the endTrapNode path in that utility.
|
|
262
|
+
*/
|
|
263
|
+
const handleExitSentinelFocus = (0, react.useCallback)(() => {
|
|
264
|
+
if (exitSentinelRef.current) exitSentinelRef.current.tabIndex = -1;
|
|
265
|
+
if (context.isOpen) send(_carbon_utilities_date_picker.DatePickerEvent.TAB_KEY);
|
|
266
|
+
}, [context.isOpen, send]);
|
|
267
|
+
return {
|
|
268
|
+
context,
|
|
269
|
+
state,
|
|
270
|
+
isOpen: context.isOpen,
|
|
271
|
+
send,
|
|
272
|
+
openCalendar,
|
|
273
|
+
closeCalendar,
|
|
274
|
+
selectDate,
|
|
275
|
+
handleInputFocus,
|
|
276
|
+
handleInputBlur,
|
|
277
|
+
handleInputChange,
|
|
278
|
+
startInputRef,
|
|
279
|
+
endInputRef,
|
|
280
|
+
calendarRef,
|
|
281
|
+
exitSentinelRef,
|
|
282
|
+
handleExitSentinelFocus
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
//#endregion
|
|
286
|
+
exports.useDatePicker = useDatePicker;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export { DatePicker } from './components/DatePicker';
|
|
8
|
+
export { DatePickerInput } from './components/DatePickerInput';
|
|
9
|
+
export { DatePickerSkeleton } from './components/DatePickerSkeleton';
|
|
10
|
+
export type { DatePickerProps } from './components/DatePicker';
|
|
11
|
+
export type { DatePickerInputProps } from './components/DatePickerInput';
|
|
12
|
+
export type { DatePickerSkeletonProps } from './components/DatePickerSkeleton';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.js");
|
|
9
|
+
const require_DatePicker = require("./components/DatePicker.js");
|
|
10
|
+
const require_DatePickerInput = require("./components/DatePickerInput.js");
|
|
11
|
+
const require_DatePickerSkeleton = require("./components/DatePickerSkeleton.js");
|
|
12
|
+
//#region src/components/DatePicker/next/index.tsx
|
|
13
|
+
var next_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
14
|
+
DatePicker: () => require_DatePicker.DatePicker,
|
|
15
|
+
DatePickerInput: () => require_DatePickerInput.DatePickerInput,
|
|
16
|
+
DatePickerSkeleton: () => require_DatePickerSkeleton.DatePickerSkeleton
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.DatePicker = require_DatePicker.DatePicker;
|
|
20
|
+
exports.DatePickerInput = require_DatePickerInput.DatePickerInput;
|
|
21
|
+
exports.DatePickerSkeleton = require_DatePickerSkeleton.DatePickerSkeleton;
|
|
22
|
+
Object.defineProperty(exports, "next_exports", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function() {
|
|
25
|
+
return next_exports;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
@@ -12,8 +12,8 @@ const require_Text = require("../Text/Text.js");
|
|
|
12
12
|
const require_useId = require("../../internal/useId.js");
|
|
13
13
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
14
14
|
const require_utils = require("../../internal/utils.js");
|
|
15
|
-
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
16
15
|
const require_index = require("../AILabel/index.js");
|
|
16
|
+
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
17
17
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
18
18
|
let react = require("react");
|
|
19
19
|
react = require_runtime.__toESM(react);
|
|
@@ -12,12 +12,12 @@ const require_defaultItemToString = require("../../internal/defaultItemToString.
|
|
|
12
12
|
const require_isItemDisabled = require("../../internal/isItemDisabled.js");
|
|
13
13
|
const require_utils = require("../../internal/utils.js");
|
|
14
14
|
const require_index = require("../FeatureFlags/index.js");
|
|
15
|
-
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
16
15
|
const require_index$1 = require("../AILabel/index.js");
|
|
16
|
+
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
17
|
+
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
17
18
|
const require_ListBoxPropTypes = require("../ListBox/ListBoxPropTypes.js");
|
|
18
19
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
19
20
|
const require_index$2 = require("../ListBox/index.js");
|
|
20
|
-
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
21
21
|
let react = require("react");
|
|
22
22
|
react = require_runtime.__toESM(react);
|
|
23
23
|
let classnames = require("classnames");
|
|
@@ -9,8 +9,8 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
|
9
9
|
const require_usePrefix = require("../../internal/usePrefix.js");
|
|
10
10
|
const require_keys = require("../../internal/keyboard/keys.js");
|
|
11
11
|
const require_match = require("../../internal/keyboard/match.js");
|
|
12
|
-
const require_events = require("../../tools/events.js");
|
|
13
12
|
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
13
|
+
const require_events = require("../../tools/events.js");
|
|
14
14
|
const require_utils = require("../Search/utils.js");
|
|
15
15
|
const require_index = require("../Search/index.js");
|
|
16
16
|
let react = require("react");
|
|
@@ -11,8 +11,8 @@ const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.
|
|
|
11
11
|
const require_useId = require("../../internal/useId.js");
|
|
12
12
|
const require_index = require("../FeatureFlags/index.js");
|
|
13
13
|
const require_index$1 = require("../Button/index.js");
|
|
14
|
-
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
15
14
|
const require_Menu = require("../Menu/Menu.js");
|
|
15
|
+
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
16
16
|
const require_useAttachedMenu = require("../../internal/useAttachedMenu.js");
|
|
17
17
|
let react = require("react");
|
|
18
18
|
react = require_runtime.__toESM(react);
|
|
@@ -15,16 +15,16 @@ const require_deprecate = require("../../prop-types/deprecate.js");
|
|
|
15
15
|
const require_defaultItemToString = require("../../internal/defaultItemToString.js");
|
|
16
16
|
const require_isItemDisabled = require("../../internal/isItemDisabled.js");
|
|
17
17
|
const require_utils = require("../../internal/utils.js");
|
|
18
|
+
const require_index = require("../AILabel/index.js");
|
|
19
|
+
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
18
20
|
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
19
21
|
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
20
|
-
const require_index = require("../AILabel/index.js");
|
|
21
22
|
const require_index$1 = require("../Checkbox/index.js");
|
|
22
23
|
const require_ListBoxPropTypes = require("../ListBox/ListBoxPropTypes.js");
|
|
23
24
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
24
25
|
const require_index$2 = require("../ListBox/index.js");
|
|
25
26
|
const require_ListBoxSelection = require("../ListBox/next/ListBoxSelection.js");
|
|
26
27
|
const require_ListBoxTrigger = require("../ListBox/next/ListBoxTrigger.js");
|
|
27
|
-
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
28
28
|
const require_filter = require("./filter.js");
|
|
29
29
|
const require_MultiSelectPropTypes = require("./MultiSelectPropTypes.js");
|
|
30
30
|
const require_isSelectAllItem = require("./tools/isSelectAllItem.js");
|
|
@@ -17,13 +17,13 @@ const require_defaultItemToString = require("../../internal/defaultItemToString.
|
|
|
17
17
|
const require_isItemDisabled = require("../../internal/isItemDisabled.js");
|
|
18
18
|
const require_utils = require("../../internal/utils.js");
|
|
19
19
|
const require_index = require("../FeatureFlags/index.js");
|
|
20
|
-
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
21
20
|
const require_index$1 = require("../AILabel/index.js");
|
|
21
|
+
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
22
|
+
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
22
23
|
const require_index$2 = require("../Checkbox/index.js");
|
|
23
24
|
const require_ListBoxPropTypes = require("../ListBox/ListBoxPropTypes.js");
|
|
24
25
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
25
26
|
const require_index$3 = require("../ListBox/index.js");
|
|
26
|
-
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
27
27
|
const require_MultiSelectPropTypes = require("./MultiSelectPropTypes.js");
|
|
28
28
|
const require_isSelectAllItem = require("./tools/isSelectAllItem.js");
|
|
29
29
|
const require_sorting = require("./tools/sorting.js");
|
|
@@ -13,10 +13,10 @@ const require_match = require("../../internal/keyboard/match.js");
|
|
|
13
13
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
14
14
|
const require_utils = require("../../internal/utils.js");
|
|
15
15
|
const require_useMergedRefs = require("../../internal/useMergedRefs.js");
|
|
16
|
-
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
17
16
|
const require_index = require("../AILabel/index.js");
|
|
18
|
-
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
19
17
|
const require_useControllableState = require("../../internal/useControllableState.js");
|
|
18
|
+
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
19
|
+
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
20
20
|
const require_clamp = require("../../internal/clamp.js");
|
|
21
21
|
const require_NumberFormatPropTypes = require("./NumberFormatPropTypes.js");
|
|
22
22
|
let react = require("react");
|
|
@@ -12,8 +12,8 @@ const require_deprecateValuesWithin = require("../../../prop-types/deprecateValu
|
|
|
12
12
|
const require_mapPopoverAlign = require("../../../tools/mapPopoverAlign.js");
|
|
13
13
|
const require_index = require("../../FeatureFlags/index.js");
|
|
14
14
|
const require_index$1 = require("../../IconButton/index.js");
|
|
15
|
-
const require_mergeRefs = require("../../../tools/mergeRefs.js");
|
|
16
15
|
const require_Menu = require("../../Menu/Menu.js");
|
|
16
|
+
const require_mergeRefs = require("../../../tools/mergeRefs.js");
|
|
17
17
|
const require_useAttachedMenu = require("../../../internal/useAttachedMenu.js");
|
|
18
18
|
let react = require("react");
|
|
19
19
|
react = require_runtime.__toESM(react);
|
|
@@ -11,9 +11,9 @@ const require_Text = require("../Text/Text.js");
|
|
|
11
11
|
const require_useId = require("../../internal/useId.js");
|
|
12
12
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
13
13
|
const require_utils = require("../../internal/utils.js");
|
|
14
|
-
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
15
14
|
const require_index = require("../AILabel/index.js");
|
|
16
15
|
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
16
|
+
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
17
17
|
let react = require("react");
|
|
18
18
|
react = require_runtime.__toESM(react);
|
|
19
19
|
let classnames = require("classnames");
|
|
@@ -10,9 +10,9 @@ const require_usePrefix = require("../../internal/usePrefix.js");
|
|
|
10
10
|
const require_useId = require("../../internal/useId.js");
|
|
11
11
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
12
12
|
const require_utils = require("../../internal/utils.js");
|
|
13
|
-
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
14
13
|
const require_index = require("../AILabel/index.js");
|
|
15
14
|
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
15
|
+
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
16
16
|
const require_index$1 = require("../RadioButton/index.js");
|
|
17
17
|
const require_createTextComponent = require("../Text/createTextComponent.js");
|
|
18
18
|
let react = require("react");
|
|
@@ -10,9 +10,9 @@ const require_usePrefix = require("../../internal/usePrefix.js");
|
|
|
10
10
|
const require_Text = require("../Text/Text.js");
|
|
11
11
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
12
12
|
const require_utils = require("../../internal/utils.js");
|
|
13
|
+
const require_index = require("../AILabel/index.js");
|
|
13
14
|
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
14
15
|
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
15
|
-
const require_index = require("../AILabel/index.js");
|
|
16
16
|
const require_events = require("../../tools/events.js");
|
|
17
17
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
18
18
|
let react = require("react");
|
|
@@ -11,8 +11,8 @@ const require_Text = require("../Text/Text.js");
|
|
|
11
11
|
const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
|
|
12
12
|
const require_useId = require("../../internal/useId.js");
|
|
13
13
|
const require_Tooltip = require("../Tooltip/Tooltip.js");
|
|
14
|
-
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
15
14
|
const require_useControllableState = require("../../internal/useControllableState.js");
|
|
15
|
+
const require_mergeRefs = require("../../tools/mergeRefs.js");
|
|
16
16
|
const require_isEllipsisActive = require("./isEllipsisActive.js");
|
|
17
17
|
const require_Tag = require("./Tag.js");
|
|
18
18
|
let react = require("react");
|
|
@@ -14,8 +14,8 @@ const require_useId = require("../../internal/useId.js");
|
|
|
14
14
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
15
15
|
const require_utils = require("../../internal/utils.js");
|
|
16
16
|
const require_useMergedRefs = require("../../internal/useMergedRefs.js");
|
|
17
|
-
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
18
17
|
const require_index = require("../AILabel/index.js");
|
|
18
|
+
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
19
19
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
20
20
|
const require_getAnnouncement = require("../../internal/getAnnouncement.js");
|
|
21
21
|
let react = require("react");
|
|
@@ -11,9 +11,9 @@ const require_Text = require("../Text/Text.js");
|
|
|
11
11
|
const require_deprecate = require("../../prop-types/deprecate.js");
|
|
12
12
|
const require_utils = require("../../internal/utils.js");
|
|
13
13
|
const require_useMergedRefs = require("../../internal/useMergedRefs.js");
|
|
14
|
+
const require_index = require("../AILabel/index.js");
|
|
14
15
|
const require_hasHelperText = require("../../internal/hasHelperText.js");
|
|
15
16
|
const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
|
|
16
|
-
const require_index = require("../AILabel/index.js");
|
|
17
17
|
const require_FormContext = require("../FluidForm/FormContext.js");
|
|
18
18
|
const require_util = require("./util.js");
|
|
19
19
|
const require_getAnnouncement = require("../../internal/getAnnouncement.js");
|
package/lib/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export * from './components/AspectRatio';
|
|
|
12
12
|
export * from './components/Breadcrumb';
|
|
13
13
|
export * from './components/Button';
|
|
14
14
|
export * from './components/ButtonSet';
|
|
15
|
+
export * as preview__Card from './components/Card';
|
|
15
16
|
export * from './components/Checkbox';
|
|
16
17
|
export * from './components/CheckboxGroup';
|
|
17
18
|
export * from './components/ClassPrefix';
|
|
@@ -29,6 +30,7 @@ export * from './components/DataTable';
|
|
|
29
30
|
export * from './components/DataTableSkeleton';
|
|
30
31
|
export * from './components/DatePicker';
|
|
31
32
|
export * from './components/DatePickerInput';
|
|
33
|
+
export * as preview__DatePicker from './components/DatePicker/next';
|
|
32
34
|
export * from './components/Dropdown';
|
|
33
35
|
export * from './components/ErrorBoundary';
|
|
34
36
|
export * from './components/ExpandableSearch';
|