@carbon/react 1.104.1 → 1.105.0-rc.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.
Files changed (83) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +988 -988
  2. package/es/components/AISkeleton/AISkeletonPlaceholder.d.ts +1 -1
  3. package/es/components/Checkbox/Checkbox.js +1 -1
  4. package/es/components/CheckboxGroup/CheckboxGroup.js +1 -1
  5. package/es/components/ComboBox/ComboBox.js +2 -2
  6. package/es/components/ComposedModal/ComposedModal.js +1 -1
  7. package/es/components/DataTable/TableDecoratorRow.js +1 -1
  8. package/es/components/DataTable/TableExpandRow.js +1 -1
  9. package/es/components/DataTable/TableHeader.js +1 -1
  10. package/es/components/DataTable/TableRow.js +1 -1
  11. package/es/components/DataTable/tools/normalize.js +1 -1
  12. package/es/components/DatePicker/DatePicker.d.ts +0 -8
  13. package/es/components/DatePicker/DatePicker.js +5 -28
  14. package/es/components/DatePicker/plugins/fixEventsPlugin.d.ts +18 -2
  15. package/es/components/DatePicker/plugins/fixEventsPlugin.js +9 -16
  16. package/es/components/DatePickerInput/DatePickerInput.js +1 -2
  17. package/es/components/Dropdown/Dropdown.js +2 -2
  18. package/es/components/FluidDatePicker/FluidDatePicker.js +1 -3
  19. package/es/components/FluidMultiSelect/FluidMultiSelect.d.ts +2 -2
  20. package/es/components/Menu/MenuItem.js +1 -1
  21. package/es/components/Modal/Modal.js +1 -1
  22. package/es/components/MultiSelect/FilterableMultiSelect.js +2 -2
  23. package/es/components/MultiSelect/MultiSelect.js +2 -2
  24. package/es/components/NumberInput/NumberInput.js +2 -2
  25. package/es/components/Pagination/Pagination.js +60 -29
  26. package/es/components/Popover/index.js +7 -4
  27. package/es/components/RadioButton/RadioButton.js +1 -1
  28. package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
  29. package/es/components/RadioTile/RadioTile.js +1 -1
  30. package/es/components/Select/Select.js +1 -1
  31. package/es/components/Slider/Slider.js +60 -45
  32. package/es/components/Tabs/Tabs.js +1 -1
  33. package/es/components/Tag/DismissibleTag.js +1 -1
  34. package/es/components/Tag/Tag.js +1 -1
  35. package/es/components/TextArea/TextArea.js +1 -1
  36. package/es/components/TextInput/TextInput.js +1 -1
  37. package/es/components/Tile/Tile.js +1 -1
  38. package/es/components/UIShell/HeaderPanel.js +1 -1
  39. package/es/components/UIShell/Switcher.js +1 -1
  40. package/es/internal/useNoInteractiveChildren.d.ts +2 -10
  41. package/es/internal/useNoInteractiveChildren.js +16 -27
  42. package/lib/components/AISkeleton/AISkeletonPlaceholder.d.ts +1 -1
  43. package/lib/components/AISkeleton/AISkeletonPlaceholder.js +1 -1
  44. package/lib/components/Checkbox/Checkbox.js +1 -1
  45. package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
  46. package/lib/components/ComboBox/ComboBox.js +2 -2
  47. package/lib/components/ComposedModal/ComposedModal.js +1 -1
  48. package/lib/components/DataTable/TableDecoratorRow.js +1 -1
  49. package/lib/components/DataTable/TableExpandRow.js +1 -1
  50. package/lib/components/DataTable/TableHeader.js +1 -1
  51. package/lib/components/DataTable/TableRow.js +1 -1
  52. package/lib/components/DataTable/tools/normalize.js +1 -1
  53. package/lib/components/DatePicker/DatePicker.d.ts +0 -8
  54. package/lib/components/DatePicker/DatePicker.js +1 -24
  55. package/lib/components/DatePicker/plugins/fixEventsPlugin.d.ts +18 -2
  56. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +9 -16
  57. package/lib/components/DatePickerInput/DatePickerInput.js +1 -2
  58. package/lib/components/Dropdown/Dropdown.js +2 -2
  59. package/lib/components/FluidDatePicker/FluidDatePicker.js +1 -3
  60. package/lib/components/FluidMultiSelect/FluidMultiSelect.d.ts +2 -2
  61. package/lib/components/Menu/MenuItem.js +1 -1
  62. package/lib/components/Modal/Modal.js +1 -1
  63. package/lib/components/MultiSelect/FilterableMultiSelect.js +2 -2
  64. package/lib/components/MultiSelect/MultiSelect.js +2 -2
  65. package/lib/components/NumberInput/NumberInput.js +2 -2
  66. package/lib/components/Pagination/Pagination.js +59 -28
  67. package/lib/components/Popover/index.js +7 -4
  68. package/lib/components/RadioButton/RadioButton.js +1 -1
  69. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
  70. package/lib/components/RadioTile/RadioTile.js +1 -1
  71. package/lib/components/Select/Select.js +1 -1
  72. package/lib/components/Slider/Slider.js +60 -45
  73. package/lib/components/Tabs/Tabs.js +1 -1
  74. package/lib/components/Tag/DismissibleTag.js +1 -1
  75. package/lib/components/Tag/Tag.js +1 -1
  76. package/lib/components/TextArea/TextArea.js +1 -1
  77. package/lib/components/TextInput/TextInput.js +1 -1
  78. package/lib/components/Tile/Tile.js +1 -1
  79. package/lib/components/UIShell/HeaderPanel.js +1 -1
  80. package/lib/components/UIShell/Switcher.js +1 -1
  81. package/lib/internal/useNoInteractiveChildren.d.ts +2 -10
  82. package/lib/internal/useNoInteractiveChildren.js +16 -27
  83. 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, invalidText, warn, warnText, light = false, locale = "en", maxDate, minDate, onChange, onClose, onOpen, readOnly = false, short = false, value, parseDate: parseDateProp, nextMonthAriaLabel = "Next month", prevMonthAriaLabel = "Previous month", ...rest } = props;
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
- declare function _default(config: object): Plugin;
2
- export default _default;
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.js
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
- return Boolean(container && (path.includes(container) || container.contains(event.target)) || fp.calendarContainer && (path.includes(fp.calendarContainer) || fp.calendarContainer.contains(event.target)) || inputFrom && (path.includes(inputFrom) || inputFrom.contains(event.target)) || inputTo && (path.includes(inputTo) || inputTo.contains(event.target)));
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,7 +47,7 @@ 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
- fp.setDate([inputFrom.value, inputTo && inputTo.value], true, fp.config.dateFormat);
50
+ fp.setDate(inputTo ? [inputFrom.value, inputTo.value] : [inputFrom.value], true, fp.config.dateFormat);
59
51
  event.stopPropagation();
60
52
  } else if (require_match.match(event, require_keys.ArrowLeft) || require_match.match(event, require_keys.ArrowRight)) event.stopPropagation();
61
53
  else if (require_match.match(event, require_keys.ArrowDown)) {
@@ -77,11 +69,12 @@ var fixEventsPlugin_default = (config) => (fp) => {
77
69
  */
78
70
  const handleBlur = (event) => {
79
71
  const { target } = event;
72
+ if (!inputTo) return;
80
73
  if (inputTo === target && fp.selectedDates[1]) {
81
74
  const withoutTime = (date) => date?.setHours(0, 0, 0, 0);
82
75
  const selectedToDate = withoutTime(new Date(fp.selectedDates[1]));
83
76
  const currentValueToDate = withoutTime(parseDateWithFormat(inputTo.value));
84
- if (selectedToDate && currentValueToDate && selectedToDate !== currentValueToDate) fp.setDate([inputFrom.value, inputTo && inputTo.value], true, fp.config.dateFormat);
77
+ if (selectedToDate && currentValueToDate && selectedToDate !== currentValueToDate) fp.setDate([inputFrom.value, inputTo.value], true, fp.config.dateFormat);
85
78
  }
86
79
  const isValidDate = (date) => date?.toString() !== "Invalid Date";
87
80
  if (inputTo === target && fp.selectedDates.length === 1 && inputTo.value) {
@@ -134,4 +127,4 @@ var fixEventsPlugin_default = (config) => (fp) => {
134
127
  };
135
128
 
136
129
  //#endregion
137
- exports.default = fixEventsPlugin_default;
130
+ 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, invalidText, readOnly, warn, warnText, ...other }, ref) {
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?: (inputValue: string) => void;
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`).
@@ -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.inputValue);
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
- function mapPageSizesToObject(sizes) {
33
- return typeof sizes[0] === "object" && sizes[0] !== null ? sizes : sizes.map((size) => ({
34
- text: size,
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
- function getPageSize(pageSizes, pageSize) {
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 [pageSizes, setPageSizes] = (0, react.useState)(() => {
64
- return mapPageSizesToObject(controlledPageSizes);
65
- });
66
- const [prevPageSizes, setPrevPageSizes] = (0, react.useState)(controlledPageSizes);
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(pageSizes, controlledPageSize);
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
- if (controlledPage !== prevControlledPage) {
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
- setPrevControlledPage(controlledPage);
110
- }
111
- if (controlledPageSize !== prevControlledPageSize) {
112
- setPageSize(getPageSize(pageSizes, controlledPageSize));
113
- setPrevControlledPageSize(controlledPageSize);
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
- })) setPage(1);
120
- setPageSizes(pageSizes);
121
- setPrevPageSizes(controlledPageSizes);
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 displayName = item?.type?.displayName;
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 && displayName && ["ToggletipButton"].includes(displayName);
219
- const isAllowedTriggerComponent = enableFloatingStyles && !["ToggletipContent", "PopoverContent"].includes(displayName);
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 && item?.type !== PopoverContent || enableFloatingStyles && item?.type["displayName"] === "ToggletipButton") refs.setReference(node);
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');