@carbon/react 1.104.1 → 1.105.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 +939 -939
- package/es/components/AISkeleton/AISkeletonPlaceholder.d.ts +1 -1
- 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/ComposedModal/ComposedModal.js +1 -1
- package/es/components/DataTable/TableDecoratorRow.js +1 -1
- package/es/components/DataTable/TableExpandRow.js +1 -1
- package/es/components/DataTable/TableHeader.js +1 -1
- package/es/components/DataTable/TableRow.js +1 -1
- package/es/components/DataTable/tools/normalize.js +1 -1
- package/es/components/DatePicker/DatePicker.d.ts +0 -8
- package/es/components/DatePicker/DatePicker.js +5 -28
- package/es/components/DatePicker/plugins/fixEventsPlugin.d.ts +18 -2
- package/es/components/DatePicker/plugins/fixEventsPlugin.js +13 -16
- package/es/components/DatePickerInput/DatePickerInput.js +1 -2
- package/es/components/Dropdown/Dropdown.js +2 -2
- package/es/components/FluidDatePicker/FluidDatePicker.js +1 -3
- package/es/components/FluidMultiSelect/FluidMultiSelect.d.ts +2 -2
- package/es/components/Menu/Menu.js +10 -3
- package/es/components/Menu/MenuItem.js +1 -1
- package/es/components/Modal/Modal.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/Pagination/Pagination.js +60 -29
- package/es/components/Popover/index.js +7 -4
- package/es/components/RadioButton/RadioButton.js +1 -1
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/es/components/RadioTile/RadioTile.js +1 -1
- package/es/components/Select/Select.js +1 -1
- package/es/components/Slider/Slider.js +60 -45
- package/es/components/Tabs/Tabs.js +1 -1
- package/es/components/Tag/DismissibleTag.js +1 -1
- package/es/components/Tag/Tag.js +1 -1
- package/es/components/TextArea/TextArea.js +1 -1
- package/es/components/TextInput/TextInput.js +1 -1
- package/es/components/Tile/Tile.js +1 -1
- package/es/components/UIShell/HeaderPanel.js +1 -1
- package/es/components/UIShell/Switcher.js +1 -1
- package/es/internal/useNoInteractiveChildren.d.ts +2 -10
- package/es/internal/useNoInteractiveChildren.js +16 -27
- package/lib/components/AISkeleton/AISkeletonPlaceholder.d.ts +1 -1
- package/lib/components/AISkeleton/AISkeletonPlaceholder.js +1 -1
- 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/ComposedModal/ComposedModal.js +1 -1
- package/lib/components/DataTable/TableDecoratorRow.js +1 -1
- package/lib/components/DataTable/TableExpandRow.js +1 -1
- package/lib/components/DataTable/TableHeader.js +1 -1
- package/lib/components/DataTable/TableRow.js +1 -1
- package/lib/components/DataTable/tools/normalize.js +1 -1
- package/lib/components/DatePicker/DatePicker.d.ts +0 -8
- package/lib/components/DatePicker/DatePicker.js +1 -24
- package/lib/components/DatePicker/plugins/fixEventsPlugin.d.ts +18 -2
- package/lib/components/DatePicker/plugins/fixEventsPlugin.js +13 -16
- package/lib/components/DatePickerInput/DatePickerInput.js +1 -2
- package/lib/components/Dropdown/Dropdown.js +2 -2
- package/lib/components/FluidDatePicker/FluidDatePicker.js +1 -3
- package/lib/components/FluidMultiSelect/FluidMultiSelect.d.ts +2 -2
- package/lib/components/Menu/Menu.js +10 -3
- package/lib/components/Menu/MenuItem.js +1 -1
- package/lib/components/Modal/Modal.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/Pagination/Pagination.js +59 -28
- package/lib/components/Popover/index.js +7 -4
- package/lib/components/RadioButton/RadioButton.js +1 -1
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/lib/components/RadioTile/RadioTile.js +1 -1
- package/lib/components/Select/Select.js +1 -1
- package/lib/components/Slider/Slider.js +60 -45
- package/lib/components/Tabs/Tabs.js +1 -1
- package/lib/components/Tag/DismissibleTag.js +1 -1
- package/lib/components/Tag/Tag.js +1 -1
- package/lib/components/TextArea/TextArea.js +1 -1
- package/lib/components/TextInput/TextInput.js +1 -1
- package/lib/components/Tile/Tile.js +1 -1
- package/lib/components/UIShell/HeaderPanel.js +1 -1
- package/lib/components/UIShell/Switcher.js +1 -1
- package/lib/internal/useNoInteractiveChildren.d.ts +2 -10
- package/lib/internal/useNoInteractiveChildren.js +16 -27
- package/package.json +7 -7
|
@@ -11,7 +11,6 @@ const require_keys = require('../../internal/keyboard/keys.js');
|
|
|
11
11
|
const require_match = require('../../internal/keyboard/match.js');
|
|
12
12
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
13
13
|
const require_utils = require('../../internal/utils.js');
|
|
14
|
-
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
15
14
|
const require_index = require('../DatePickerInput/index.js');
|
|
16
15
|
const require_appendToPlugin = require('./plugins/appendToPlugin.js');
|
|
17
16
|
const require_fixEventsPlugin = require('./plugins/fixEventsPlugin.js');
|
|
@@ -26,7 +25,6 @@ react = require_runtime.__toESM(react);
|
|
|
26
25
|
let prop_types = require("prop-types");
|
|
27
26
|
prop_types = require_runtime.__toESM(prop_types);
|
|
28
27
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
29
|
-
let _carbon_icons_react = require("@carbon/icons-react");
|
|
30
28
|
let flatpickr = require("flatpickr");
|
|
31
29
|
flatpickr = require_runtime.__toESM(flatpickr);
|
|
32
30
|
let flatpickr_dist_l10n_index = require("flatpickr/dist/l10n/index");
|
|
@@ -135,9 +133,8 @@ function updateClassNames(calendar, prefix) {
|
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
const DatePicker = (0, react.forwardRef)((props, ref) => {
|
|
138
|
-
const { allowInput, appendTo, children, className, closeOnSelect = true, dateFormat = "m/d/Y", datePickerType, disable, enable, inline, invalid,
|
|
136
|
+
const { allowInput, appendTo, children, className, closeOnSelect = true, dateFormat = "m/d/Y", datePickerType, disable, enable, inline, invalid, warn, light = false, locale = "en", maxDate, minDate, onChange, onClose, onOpen, readOnly = false, short = false, value, parseDate: parseDateProp, nextMonthAriaLabel = "Next month", prevMonthAriaLabel = "Previous month", ...rest } = props;
|
|
139
137
|
const prefix = require_usePrefix.usePrefix();
|
|
140
|
-
const { isFluid } = (0, react.useContext)(require_FormContext.FormContext);
|
|
141
138
|
const [hasInput, setHasInput] = (0, react.useState)(false);
|
|
142
139
|
const startInputField = (0, react.useCallback)((node) => {
|
|
143
140
|
if (node !== null) {
|
|
@@ -441,24 +438,6 @@ const DatePicker = (0, react.forwardRef)((props, ref) => {
|
|
|
441
438
|
startInputField
|
|
442
439
|
]);
|
|
443
440
|
let fluidError;
|
|
444
|
-
if (isFluid) {
|
|
445
|
-
if (invalid) fluidError = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
446
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningFilled, { className: `${prefix}--date-picker__icon ${prefix}--date-picker__icon--invalid` }),
|
|
447
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", { className: `${prefix}--date-picker__divider` }),
|
|
448
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
449
|
-
className: `${prefix}--form-requirement`,
|
|
450
|
-
children: invalidText
|
|
451
|
-
})
|
|
452
|
-
] });
|
|
453
|
-
else if (warn) fluidError = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
454
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_carbon_icons_react.WarningAltFilled, { className: `${prefix}--date-picker__icon ${prefix}--date-picker__icon--warn` }),
|
|
455
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", { className: `${prefix}--date-picker__divider` }),
|
|
456
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
457
|
-
className: `${prefix}--form-requirement`,
|
|
458
|
-
children: warnText
|
|
459
|
-
})
|
|
460
|
-
] });
|
|
461
|
-
}
|
|
462
441
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
463
442
|
className: wrapperClasses,
|
|
464
443
|
ref,
|
|
@@ -486,7 +465,6 @@ DatePicker.propTypes = {
|
|
|
486
465
|
enable: prop_types.default.array,
|
|
487
466
|
inline: prop_types.default.bool,
|
|
488
467
|
invalid: prop_types.default.bool,
|
|
489
|
-
invalidText: prop_types.default.node,
|
|
490
468
|
light: require_deprecate.deprecate(prop_types.default.bool, "The `light` prop for `DatePicker` has been deprecated in favor of the new `Layer` component. It will be removed in the next major release."),
|
|
491
469
|
locale: prop_types.default.oneOfType([prop_types.default.object, prop_types.default.oneOf(require_DatePickerLocales.SUPPORTED_LOCALES)]),
|
|
492
470
|
maxDate: prop_types.default.oneOfType([prop_types.default.string, prop_types.default.number]),
|
|
@@ -508,7 +486,6 @@ DatePicker.propTypes = {
|
|
|
508
486
|
prop_types.default.number
|
|
509
487
|
]),
|
|
510
488
|
warn: prop_types.default.bool,
|
|
511
|
-
warnText: prop_types.default.node,
|
|
512
489
|
nextMonthAriaLabel: prop_types.default.string,
|
|
513
490
|
prevMonthAriaLabel: prop_types.default.string
|
|
514
491
|
};
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
+
import type { Plugin } from 'flatpickr/dist/types/options';
|
|
8
|
+
interface FixEventsPluginConfig {
|
|
9
|
+
inputFrom: HTMLInputElement;
|
|
10
|
+
inputTo?: HTMLInputElement | null;
|
|
11
|
+
lastStartValue: {
|
|
12
|
+
current: string;
|
|
13
|
+
};
|
|
14
|
+
container?: HTMLElement | null;
|
|
15
|
+
}
|
|
16
|
+
type FixEventsPlugin = (config: FixEventsPluginConfig) => Plugin;
|
|
17
|
+
declare const fixEventsPlugin: FixEventsPlugin;
|
|
18
|
+
export default fixEventsPlugin;
|
|
@@ -8,24 +8,16 @@
|
|
|
8
8
|
const require_keys = require('../../../internal/keyboard/keys.js');
|
|
9
9
|
const require_match = require('../../../internal/keyboard/match.js');
|
|
10
10
|
|
|
11
|
-
//#region src/components/DatePicker/plugins/fixEventsPlugin.
|
|
12
|
-
|
|
13
|
-
* Copyright IBM Corp. 2016, 2026
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the Apache-2.0 license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* @param {object} config Plugin configuration.
|
|
20
|
-
* @returns {Plugin} A Flatpickr plugin to fix Flatpickr's behavior of certain events.
|
|
21
|
-
*/
|
|
22
|
-
var fixEventsPlugin_default = (config) => (fp) => {
|
|
11
|
+
//#region src/components/DatePicker/plugins/fixEventsPlugin.ts
|
|
12
|
+
const fixEventsPlugin = (config) => (fp) => {
|
|
23
13
|
const { inputFrom, inputTo, lastStartValue, container } = config;
|
|
24
14
|
let mouseDownInside = false;
|
|
25
15
|
const getEventPath = (event) => typeof event.composedPath === "function" ? event.composedPath() : [];
|
|
26
16
|
const isEventInside = (event) => {
|
|
27
17
|
const path = getEventPath(event);
|
|
28
|
-
|
|
18
|
+
const { target } = event;
|
|
19
|
+
if (!(target instanceof Node)) return false;
|
|
20
|
+
return Boolean(container && (path.includes(container) || container.contains(target)) || fp.calendarContainer && (path.includes(fp.calendarContainer) || fp.calendarContainer.contains(target)) || inputFrom && (path.includes(inputFrom) || inputFrom.contains(target)) || inputTo && (path.includes(inputTo) || inputTo.contains(target)));
|
|
29
21
|
};
|
|
30
22
|
/**
|
|
31
23
|
* Handles `click` outside to close calendar
|
|
@@ -55,8 +47,12 @@ var fixEventsPlugin_default = (config) => (fp) => {
|
|
|
55
47
|
const { target } = event;
|
|
56
48
|
if (inputFrom === target || inputTo === target) {
|
|
57
49
|
if (require_match.match(event, require_keys.Enter)) {
|
|
58
|
-
|
|
50
|
+
mouseDownInside = false;
|
|
51
|
+
fp.setDate(inputTo ? [inputFrom.value, inputTo.value] : [inputFrom.value], true, fp.config.dateFormat);
|
|
59
52
|
event.stopPropagation();
|
|
53
|
+
if (inputTo === target && fp.config.closeOnSelect) requestAnimationFrame(() => {
|
|
54
|
+
fp.close();
|
|
55
|
+
});
|
|
60
56
|
} else if (require_match.match(event, require_keys.ArrowLeft) || require_match.match(event, require_keys.ArrowRight)) event.stopPropagation();
|
|
61
57
|
else if (require_match.match(event, require_keys.ArrowDown)) {
|
|
62
58
|
event.preventDefault();
|
|
@@ -77,11 +73,12 @@ var fixEventsPlugin_default = (config) => (fp) => {
|
|
|
77
73
|
*/
|
|
78
74
|
const handleBlur = (event) => {
|
|
79
75
|
const { target } = event;
|
|
76
|
+
if (!inputTo) return;
|
|
80
77
|
if (inputTo === target && fp.selectedDates[1]) {
|
|
81
78
|
const withoutTime = (date) => date?.setHours(0, 0, 0, 0);
|
|
82
79
|
const selectedToDate = withoutTime(new Date(fp.selectedDates[1]));
|
|
83
80
|
const currentValueToDate = withoutTime(parseDateWithFormat(inputTo.value));
|
|
84
|
-
if (selectedToDate && currentValueToDate && selectedToDate !== currentValueToDate) fp.setDate([inputFrom.value, inputTo
|
|
81
|
+
if (selectedToDate && currentValueToDate && selectedToDate !== currentValueToDate) fp.setDate([inputFrom.value, inputTo.value], true, fp.config.dateFormat);
|
|
85
82
|
}
|
|
86
83
|
const isValidDate = (date) => date?.toString() !== "Invalid Date";
|
|
87
84
|
if (inputTo === target && fp.selectedDates.length === 1 && inputTo.value) {
|
|
@@ -134,4 +131,4 @@ var fixEventsPlugin_default = (config) => (fp) => {
|
|
|
134
131
|
};
|
|
135
132
|
|
|
136
133
|
//#endregion
|
|
137
|
-
exports.default =
|
|
134
|
+
exports.default = fixEventsPlugin;
|
|
@@ -11,8 +11,8 @@ const require_Text = require('../Text/Text.js');
|
|
|
11
11
|
const require_useId = require('../../internal/useId.js');
|
|
12
12
|
const require_warning = require('../../internal/warning.js');
|
|
13
13
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
14
|
-
const require_index = require('../AILabel/index.js');
|
|
15
14
|
const require_utils = require('../../internal/utils.js');
|
|
15
|
+
const require_index = require('../AILabel/index.js');
|
|
16
16
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
17
17
|
const require_useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
|
|
18
18
|
let classnames = require("classnames");
|
|
@@ -114,7 +114,6 @@ const DatePickerInput = (0, react.forwardRef)((props, ref) => {
|
|
|
114
114
|
className: `${prefix}--date-picker-input-inner-wrapper--decorator`,
|
|
115
115
|
children: normalizedDecorator
|
|
116
116
|
}) : "",
|
|
117
|
-
isFluid && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DatePickerIcon, { datePickerType }),
|
|
118
117
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DatePickerIcon, {
|
|
119
118
|
datePickerType,
|
|
120
119
|
invalid: normalizedProps.invalid,
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
9
9
|
const require_usePrefix = require('../../internal/usePrefix.js');
|
|
10
10
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
11
|
-
const require_index = require('../FeatureFlags/index.js');
|
|
12
|
-
const require_index$1 = require('../AILabel/index.js');
|
|
13
11
|
const require_defaultItemToString = require('../../internal/defaultItemToString.js');
|
|
14
12
|
const require_utils = require('../../internal/utils.js');
|
|
13
|
+
const require_index = require('../FeatureFlags/index.js');
|
|
14
|
+
const require_index$1 = require('../AILabel/index.js');
|
|
15
15
|
const require_ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
|
|
16
16
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
17
17
|
const require_index$2 = require('../ListBox/index.js');
|
|
@@ -24,7 +24,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
24
24
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
25
25
|
* LICENSE file in the root directory of this source tree.
|
|
26
26
|
*/
|
|
27
|
-
const FluidDatePicker = react.default.forwardRef(function FluidDatePicker({ className, children, invalid,
|
|
27
|
+
const FluidDatePicker = react.default.forwardRef(function FluidDatePicker({ className, children, invalid, readOnly, warn, ...other }, ref) {
|
|
28
28
|
const prefix = require_usePrefix.usePrefix();
|
|
29
29
|
const classNames = (0, classnames.default)(className, {
|
|
30
30
|
[`${prefix}--date-picker--fluid`]: true,
|
|
@@ -36,10 +36,8 @@ const FluidDatePicker = react.default.forwardRef(function FluidDatePicker({ clas
|
|
|
36
36
|
value: { isFluid: true },
|
|
37
37
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
|
|
38
38
|
invalid,
|
|
39
|
-
invalidText,
|
|
40
39
|
readOnly,
|
|
41
40
|
warn,
|
|
42
|
-
warnText,
|
|
43
41
|
className: classNames,
|
|
44
42
|
ref,
|
|
45
43
|
...other,
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React, { type ComponentProps } from 'react';
|
|
8
8
|
import { MultiSelect, type MultiSelectProps } from '../MultiSelect';
|
|
9
|
-
import { UseSelectProps } from 'downshift';
|
|
9
|
+
import { UseComboboxProps, UseSelectProps } from 'downshift';
|
|
10
10
|
interface OnChangeData<ItemType> {
|
|
11
11
|
selectedItems: ItemType[] | null;
|
|
12
12
|
}
|
|
@@ -97,7 +97,7 @@ export interface FluidMultiSelectProps<ItemType> extends MultiSelectProps<ItemTy
|
|
|
97
97
|
* **Filterable variant only** - `onInputValueChange` is a utility for this controlled component to communicate to
|
|
98
98
|
* the currently typed input.
|
|
99
99
|
*/
|
|
100
|
-
onInputValueChange?:
|
|
100
|
+
onInputValueChange?: UseComboboxProps<ItemType>['onInputValueChange'];
|
|
101
101
|
/**
|
|
102
102
|
* `onMenuChange` is a utility for this controlled component to communicate to a
|
|
103
103
|
* consuming component that the menu was open(`true`)/closed(`false`).
|
|
@@ -54,7 +54,7 @@ const Menu = (0, react.forwardRef)(function Menu({ backgroundToken = "layer", bo
|
|
|
54
54
|
const menu = (0, react.useRef)(null);
|
|
55
55
|
const ref = require_useMergedRefs.useMergedRefs([forwardRef, menu]);
|
|
56
56
|
const [position, setPosition] = (0, react.useState)([-1, -1]);
|
|
57
|
-
const focusableItems = childContext.state.items.filter((item) => !item.disabled && item.ref.current);
|
|
57
|
+
const focusableItems = (0, react.useMemo)(() => childContext.state.items.filter((item) => !item.disabled && item.ref.current), [childContext.state.items]);
|
|
58
58
|
let actionButtonWidth;
|
|
59
59
|
if (containerRef?.current) {
|
|
60
60
|
const { width: w } = containerRef.current.getBoundingClientRect();
|
|
@@ -173,11 +173,18 @@ const Menu = (0, react.forwardRef)(function Menu({ backgroundToken = "layer", bo
|
|
|
173
173
|
(0, react.useEffect)(() => {
|
|
174
174
|
if (open) {
|
|
175
175
|
const raf = requestAnimationFrame(() => {
|
|
176
|
-
|
|
176
|
+
const activeElement = menu.current?.ownerDocument.activeElement;
|
|
177
|
+
const menuContainsFocus = activeElement instanceof Node && menu.current?.contains(activeElement);
|
|
178
|
+
if (focusableItems.length > 0 && (!isRoot || menuContainsFocus)) focusItem();
|
|
177
179
|
});
|
|
178
180
|
return () => cancelAnimationFrame(raf);
|
|
179
181
|
}
|
|
180
|
-
}, [
|
|
182
|
+
}, [
|
|
183
|
+
open,
|
|
184
|
+
focusableItems,
|
|
185
|
+
isRoot,
|
|
186
|
+
position
|
|
187
|
+
]);
|
|
181
188
|
(0, react.useEffect)(() => {
|
|
182
189
|
if (open) handleOpen();
|
|
183
190
|
else setPosition([-1, -1]);
|
|
@@ -11,8 +11,8 @@ const require_Text = require('../Text/Text.js');
|
|
|
11
11
|
const require_keys = require('../../internal/keyboard/keys.js');
|
|
12
12
|
const require_match = require('../../internal/keyboard/match.js');
|
|
13
13
|
const require_useId = require('../../internal/useId.js');
|
|
14
|
-
const require_useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
15
14
|
const require_defaultItemToString = require('../../internal/defaultItemToString.js');
|
|
15
|
+
const require_useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
16
16
|
const require_MenuContext = require('./MenuContext.js');
|
|
17
17
|
const require_useLayoutDirection = require('../LayoutDirection/useLayoutDirection.js');
|
|
18
18
|
const require_Menu = require('./Menu.js');
|
|
@@ -14,13 +14,13 @@ const require_useId = require('../../internal/useId.js');
|
|
|
14
14
|
const require_noopFn = require('../../internal/noopFn.js');
|
|
15
15
|
const require_warning = require('../../internal/warning.js');
|
|
16
16
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
17
|
+
const require_utils = require('../../internal/utils.js');
|
|
17
18
|
const require_useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
18
19
|
const require_index = require('../FeatureFlags/index.js');
|
|
19
20
|
const require_index$1 = require('../IconButton/index.js');
|
|
20
21
|
const require_index$2 = require('../Button/index.js');
|
|
21
22
|
const require_index$3 = require('../ButtonSet/index.js');
|
|
22
23
|
const require_index$4 = require('../AILabel/index.js');
|
|
23
|
-
const require_utils = require('../../internal/utils.js');
|
|
24
24
|
const require_useResizeObserver = require('../../internal/useResizeObserver.js');
|
|
25
25
|
const require_events = require('../../tools/events.js');
|
|
26
26
|
const require_index$5 = require('../Layer/index.js');
|
|
@@ -12,9 +12,9 @@ const require_match = require('../../internal/keyboard/match.js');
|
|
|
12
12
|
const require_useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
|
|
13
13
|
const require_useId = require('../../internal/useId.js');
|
|
14
14
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
15
|
-
const require_index = require('../AILabel/index.js');
|
|
16
15
|
const require_defaultItemToString = require('../../internal/defaultItemToString.js');
|
|
17
16
|
const require_utils = require('../../internal/utils.js');
|
|
17
|
+
const require_index = require('../AILabel/index.js');
|
|
18
18
|
const require_index$1 = require('../Checkbox/index.js');
|
|
19
19
|
const require_ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
|
|
20
20
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
@@ -296,7 +296,7 @@ const FilterableMultiSelect = (0, react.forwardRef)(function FilterableMultiSele
|
|
|
296
296
|
highlightedIndex: controlledSelectedItems.length > 0 ? 0 : -1
|
|
297
297
|
};
|
|
298
298
|
case InputChange:
|
|
299
|
-
if (onInputValueChange) onInputValueChange(changes
|
|
299
|
+
if (onInputValueChange) onInputValueChange(changes);
|
|
300
300
|
setInputValue(changes.inputValue ?? "");
|
|
301
301
|
setIsOpen(true);
|
|
302
302
|
return {
|
|
@@ -13,10 +13,10 @@ const require_useIsomorphicEffect = require('../../internal/useIsomorphicEffect.
|
|
|
13
13
|
const require_useId = require('../../internal/useId.js');
|
|
14
14
|
const require_noopFn = require('../../internal/noopFn.js');
|
|
15
15
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
16
|
-
const require_index = require('../FeatureFlags/index.js');
|
|
17
|
-
const require_index$1 = require('../AILabel/index.js');
|
|
18
16
|
const require_defaultItemToString = require('../../internal/defaultItemToString.js');
|
|
19
17
|
const require_utils = require('../../internal/utils.js');
|
|
18
|
+
const require_index = require('../FeatureFlags/index.js');
|
|
19
|
+
const require_index$1 = require('../AILabel/index.js');
|
|
20
20
|
const require_index$2 = require('../Checkbox/index.js');
|
|
21
21
|
const require_ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
|
|
22
22
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
@@ -11,9 +11,9 @@ const require_Text = require('../Text/Text.js');
|
|
|
11
11
|
const require_keys = require('../../internal/keyboard/keys.js');
|
|
12
12
|
const require_match = require('../../internal/keyboard/match.js');
|
|
13
13
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
14
|
+
const require_utils = require('../../internal/utils.js');
|
|
14
15
|
const require_useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
15
16
|
const require_index = require('../AILabel/index.js');
|
|
16
|
-
const require_utils = require('../../internal/utils.js');
|
|
17
17
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
18
18
|
const require_useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
|
|
19
19
|
const require_useControllableState = require('../../internal/useControllableState.js');
|
|
@@ -377,7 +377,7 @@ const NumberInput = react.default.forwardRef((props, forwardRef) => {
|
|
|
377
377
|
onChange: handleOnChange,
|
|
378
378
|
onKeyUp,
|
|
379
379
|
onKeyDown: (e) => {
|
|
380
|
-
if (type === "text") {
|
|
380
|
+
if (type === "text" && !readOnly && !disabled) {
|
|
381
381
|
if (require_match.match(e, require_keys.ArrowUp)) handleStep(e, "up");
|
|
382
382
|
else if (require_match.match(e, require_keys.ArrowDown)) handleStep(e, "down");
|
|
383
383
|
}
|
|
@@ -9,6 +9,7 @@ const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
|
9
9
|
const require_usePrefix = require('../../internal/usePrefix.js');
|
|
10
10
|
const require_useId = require('../../internal/useId.js');
|
|
11
11
|
const require_index = require('../IconButton/index.js');
|
|
12
|
+
const require_usePreviousValue = require('../../internal/usePreviousValue.js');
|
|
12
13
|
const require_index$1 = require('../Select/index.js');
|
|
13
14
|
const require_index$2 = require('../SelectItem/index.js');
|
|
14
15
|
let classnames = require("classnames");
|
|
@@ -29,12 +30,14 @@ react_fast_compare = require_runtime.__toESM(react_fast_compare);
|
|
|
29
30
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
30
31
|
* LICENSE file in the root directory of this source tree.
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const isPaginationPageSizeArray = (sizes) => typeof sizes[0] === "object" && sizes[0] !== null;
|
|
34
|
+
const mapPageSizesToObject = (sizes) => {
|
|
35
|
+
if (isPaginationPageSizeArray(sizes)) return sizes;
|
|
36
|
+
return sizes.map((size) => ({
|
|
37
|
+
text: String(size),
|
|
35
38
|
value: size
|
|
36
39
|
}));
|
|
37
|
-
}
|
|
40
|
+
};
|
|
38
41
|
function renderSelectItems(total) {
|
|
39
42
|
let counter = 1;
|
|
40
43
|
const itemArr = [];
|
|
@@ -47,30 +50,29 @@ function renderSelectItems(total) {
|
|
|
47
50
|
}
|
|
48
51
|
return itemArr;
|
|
49
52
|
}
|
|
50
|
-
|
|
51
|
-
if (pageSize) {
|
|
53
|
+
const getPageSize = (pageSizes, pageSize) => {
|
|
54
|
+
if (typeof pageSize !== "undefined") {
|
|
52
55
|
if (pageSizes.find((size) => {
|
|
53
56
|
return pageSize === size.value;
|
|
54
57
|
})) return pageSize;
|
|
55
58
|
}
|
|
56
59
|
return pageSizes[0].value;
|
|
57
|
-
}
|
|
60
|
+
};
|
|
58
61
|
const Pagination = react.default.forwardRef(({ backwardText = "Previous page", className: customClassName = "", disabled = false, forwardText = "Next page", id, isLastPage = false, itemText = (min, max) => `${min}–${max} items`, itemRangeText = (min, max, total) => `${min}–${max} of ${total} items`, itemsPerPageText = "Items per page:", onChange, pageNumberText: _pageNumberText, pageRangeText = (_current, total) => `of ${total} ${total === 1 ? "page" : "pages"}`, pageSelectLabelText = (total) => `Page of ${total} ${total === 1 ? "page" : "pages"}`, page: controlledPage = 1, pageInputDisabled, pageSize: controlledPageSize, pageSizeInputDisabled, pageSizes: controlledPageSizes, pageText = (page) => `page ${page}`, pagesUnknown = false, size = "md", totalItems, ...rest }, ref) => {
|
|
59
62
|
const prefix = require_usePrefix.usePrefix();
|
|
60
63
|
const inputId = require_useId.useFallbackId(id?.toString());
|
|
61
64
|
const backBtnRef = (0, react.useRef)(null);
|
|
62
65
|
const forwardBtnRef = (0, react.useRef)(null);
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
66
|
+
const pendingChangeRef = (0, react.useRef)(null);
|
|
67
|
+
const normalizedControlledPageSizes = (0, react.useMemo)(() => mapPageSizesToObject(controlledPageSizes), [controlledPageSizes]);
|
|
68
|
+
const prevControlledPageSize = require_usePreviousValue.usePreviousValue(controlledPageSize);
|
|
69
|
+
const prevControlledPageSizes = require_usePreviousValue.usePreviousValue(normalizedControlledPageSizes);
|
|
70
|
+
const [pageSizes, setPageSizes] = (0, react.useState)(normalizedControlledPageSizes);
|
|
67
71
|
const [page, setPage] = (0, react.useState)(controlledPage);
|
|
68
|
-
const [prevControlledPage, setPrevControlledPage] = (0, react.useState)(controlledPage);
|
|
69
72
|
const [focusTarget, setFocusTarget] = (0, react.useState)(null);
|
|
70
73
|
const [pageSize, setPageSize] = (0, react.useState)(() => {
|
|
71
|
-
return getPageSize(
|
|
74
|
+
return getPageSize(normalizedControlledPageSizes, controlledPageSize);
|
|
72
75
|
});
|
|
73
|
-
const [prevControlledPageSize, setPrevControlledPageSize] = (0, react.useState)(controlledPageSize);
|
|
74
76
|
const className = (0, classnames.default)({
|
|
75
77
|
[`${prefix}--pagination`]: true,
|
|
76
78
|
[`${prefix}--pagination--${size}`]: size,
|
|
@@ -104,22 +106,51 @@ const Pagination = react.default.forwardRef(({ backwardText = "Previous page", c
|
|
|
104
106
|
setFocusTarget(null);
|
|
105
107
|
}
|
|
106
108
|
}, [focusTarget]);
|
|
107
|
-
|
|
109
|
+
(0, react.useEffect)(() => {
|
|
110
|
+
if (pendingChangeRef.current && onChange) {
|
|
111
|
+
onChange(pendingChangeRef.current);
|
|
112
|
+
pendingChangeRef.current = null;
|
|
113
|
+
}
|
|
114
|
+
}, [
|
|
115
|
+
onChange,
|
|
116
|
+
page,
|
|
117
|
+
pageSize
|
|
118
|
+
]);
|
|
119
|
+
(0, react.useEffect)(() => {
|
|
108
120
|
setPage(controlledPage);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (!(0, react_fast_compare.default)(controlledPageSizes, prevPageSizes)) {
|
|
116
|
-
const pageSizes = mapPageSizesToObject(controlledPageSizes);
|
|
117
|
-
if (!pageSizes.find((size) => {
|
|
121
|
+
}, [controlledPage]);
|
|
122
|
+
(0, react.useEffect)(() => {
|
|
123
|
+
if (typeof prevControlledPageSizes === "undefined" || (0, react_fast_compare.default)(prevControlledPageSizes, normalizedControlledPageSizes)) return;
|
|
124
|
+
setPageSizes((prev) => (0, react_fast_compare.default)(normalizedControlledPageSizes, prev) ? prev : normalizedControlledPageSizes);
|
|
125
|
+
const nextPageSize = getPageSize(normalizedControlledPageSizes, controlledPageSize ?? pageSize);
|
|
126
|
+
const hasPageSize = normalizedControlledPageSizes.some((size) => {
|
|
118
127
|
return size.value === pageSize;
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
});
|
|
129
|
+
const nextPage = hasPageSize ? page : 1;
|
|
130
|
+
const hasControlledPageSize = typeof controlledPageSize !== "undefined";
|
|
131
|
+
const hasValidControlledPageSize = hasControlledPageSize ? normalizedControlledPageSizes.some((size) => size.value === controlledPageSize) : false;
|
|
132
|
+
if (!hasPageSize) setPage(nextPage);
|
|
133
|
+
if (nextPageSize !== pageSize) setPageSize(nextPageSize);
|
|
134
|
+
if (onChange && (!hasControlledPageSize || !hasValidControlledPageSize) && (nextPage !== page || nextPageSize !== pageSize)) pendingChangeRef.current = {
|
|
135
|
+
page: nextPage,
|
|
136
|
+
pageSize: nextPageSize
|
|
137
|
+
};
|
|
138
|
+
}, [
|
|
139
|
+
controlledPageSize,
|
|
140
|
+
normalizedControlledPageSizes,
|
|
141
|
+
onChange,
|
|
142
|
+
page,
|
|
143
|
+
pageSize,
|
|
144
|
+
prevControlledPageSizes
|
|
145
|
+
]);
|
|
146
|
+
(0, react.useEffect)(() => {
|
|
147
|
+
if (controlledPageSize === prevControlledPageSize) return;
|
|
148
|
+
setPageSize(getPageSize(normalizedControlledPageSizes, controlledPageSize));
|
|
149
|
+
}, [
|
|
150
|
+
controlledPageSize,
|
|
151
|
+
normalizedControlledPageSizes,
|
|
152
|
+
prevControlledPageSize
|
|
153
|
+
]);
|
|
123
154
|
function handleSizeChange(event) {
|
|
124
155
|
const changes = {
|
|
125
156
|
pageSize: Number(event.target.value),
|
|
@@ -9,6 +9,7 @@ const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
|
9
9
|
const require_usePrefix = require('../../internal/usePrefix.js');
|
|
10
10
|
const require_useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
|
|
11
11
|
const require_deprecateValuesWithin = require('../../prop-types/deprecateValuesWithin.js');
|
|
12
|
+
const require_utils = require('../../internal/utils.js');
|
|
12
13
|
const require_useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
13
14
|
const require_useEvent = require('../../internal/useEvent.js');
|
|
14
15
|
const require_mapPopoverAlign = require('../../tools/mapPopoverAlign.js');
|
|
@@ -206,7 +207,9 @@ const Popover = react.default.forwardRef(function PopoverRenderFunction({ isTabT
|
|
|
206
207
|
}, customClassName);
|
|
207
208
|
const mappedChildren = react.default.Children.map(children, (child) => {
|
|
208
209
|
const item = child;
|
|
209
|
-
const
|
|
210
|
+
const isToggletipButton = item?.type?.displayName === "ToggletipButton";
|
|
211
|
+
const isToggletipContent = item?.type?.displayName === "ToggletipContent";
|
|
212
|
+
const isPopoverContent = require_utils.isComponentElement(item, PopoverContent);
|
|
210
213
|
/**
|
|
211
214
|
* Only trigger elements (button) or trigger components (ToggletipButton) should be
|
|
212
215
|
* cloned because these will be decorated with a trigger-specific className and ref.
|
|
@@ -215,8 +218,8 @@ const Popover = react.default.forwardRef(function PopoverRenderFunction({ isTabT
|
|
|
215
218
|
* is on, even if they are a trigger element.
|
|
216
219
|
*/
|
|
217
220
|
const isTriggerElement = item?.type === "button";
|
|
218
|
-
const isTriggerComponent = enableFloatingStyles &&
|
|
219
|
-
const isAllowedTriggerComponent = enableFloatingStyles && !
|
|
221
|
+
const isTriggerComponent = enableFloatingStyles && isToggletipButton;
|
|
222
|
+
const isAllowedTriggerComponent = enableFloatingStyles && !isToggletipContent && !isPopoverContent;
|
|
220
223
|
if (react.default.isValidElement(item) && (isTriggerElement || isTriggerComponent || isAllowedTriggerComponent)) {
|
|
221
224
|
const className = (item?.props)?.className;
|
|
222
225
|
const ref = (item?.props).ref;
|
|
@@ -224,7 +227,7 @@ const Popover = react.default.forwardRef(function PopoverRenderFunction({ isTabT
|
|
|
224
227
|
return react.default.cloneElement(item, {
|
|
225
228
|
className: isTabTip && item?.type === "button" ? tabTipClasses : className || "",
|
|
226
229
|
ref: (node) => {
|
|
227
|
-
if (enableFloatingStyles &&
|
|
230
|
+
if (enableFloatingStyles && !isPopoverContent) refs.setReference(node);
|
|
228
231
|
if (typeof ref === "function") ref(node);
|
|
229
232
|
else if (ref !== null && ref !== void 0) ref.current = node;
|
|
230
233
|
}
|
|
@@ -10,8 +10,8 @@ const require_usePrefix = require('../../internal/usePrefix.js');
|
|
|
10
10
|
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
|
-
const require_index = require('../AILabel/index.js');
|
|
14
13
|
const require_utils = require('../../internal/utils.js');
|
|
14
|
+
const require_index = require('../AILabel/index.js');
|
|
15
15
|
const require_mergeRefs = require('../../tools/mergeRefs.js');
|
|
16
16
|
const require_useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
|
|
17
17
|
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_useId = require('../../internal/useId.js');
|
|
11
11
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
12
|
-
const require_index = require('../AILabel/index.js');
|
|
13
12
|
const require_utils = require('../../internal/utils.js');
|
|
13
|
+
const require_index = require('../AILabel/index.js');
|
|
14
14
|
const require_mergeRefs = require('../../tools/mergeRefs.js');
|
|
15
15
|
const require_createTextComponent = require('../Text/createTextComponent.js');
|
|
16
16
|
let classnames = require("classnames");
|
|
@@ -13,9 +13,9 @@ const require_match = require('../../internal/keyboard/match.js');
|
|
|
13
13
|
const require_useId = require('../../internal/useId.js');
|
|
14
14
|
const require_noopFn = require('../../internal/noopFn.js');
|
|
15
15
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
16
|
+
const require_utils = require('../../internal/utils.js');
|
|
16
17
|
const require_index = require('../FeatureFlags/index.js');
|
|
17
18
|
const require_index$1 = require('../AILabel/index.js');
|
|
18
|
-
const require_utils = require('../../internal/utils.js');
|
|
19
19
|
let classnames = require("classnames");
|
|
20
20
|
classnames = require_runtime.__toESM(classnames);
|
|
21
21
|
let react = require("react");
|
|
@@ -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_Text = require('../Text/Text.js');
|
|
11
11
|
const require_deprecate = require('../../prop-types/deprecate.js');
|
|
12
|
-
const require_index = require('../AILabel/index.js');
|
|
13
12
|
const require_utils = require('../../internal/utils.js');
|
|
13
|
+
const require_index = require('../AILabel/index.js');
|
|
14
14
|
const require_events = require('../../tools/events.js');
|
|
15
15
|
const require_FormContext = require('../FluidForm/FormContext.js');
|
|
16
16
|
const require_useNormalizedInputProps = require('../../internal/useNormalizedInputProps.js');
|