@carbon/react 1.114.0 → 1.115.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 (136) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +2700 -1188
  2. package/es/components/Accordion/AccordionItem.d.ts +5 -0
  3. package/es/components/Accordion/AccordionItem.js +0 -6
  4. package/es/components/BigNumber/BigNumber.d.ts +82 -0
  5. package/es/components/BigNumber/BigNumberSkeleton.d.ts +16 -0
  6. package/es/components/BigNumber/constants.d.ts +19 -0
  7. package/es/components/BigNumber/index.d.ts +9 -0
  8. package/es/components/Card/Card.d.ts +1 -1
  9. package/es/components/Card/Card.js +19 -7
  10. package/es/components/Card/Card.types.d.ts +38 -7
  11. package/es/components/Card/CardActions.js +1 -1
  12. package/es/components/Card/CardBody.d.ts +2 -1
  13. package/es/components/Card/CardBody.js +3 -2
  14. package/es/components/Card/CardFooter.d.ts +5 -1
  15. package/es/components/Card/CardFooter.js +13 -2
  16. package/es/components/Card/CardTitle.d.ts +1 -1
  17. package/es/components/ComboBox/ComboBox.js +2 -2
  18. package/es/components/ComposedModal/ComposedModal.js +2 -2
  19. package/es/components/ContentSwitcher/ContentSwitcher.js +2 -2
  20. package/es/components/DatePicker/DatePicker.d.ts +1 -1
  21. package/es/components/DatePicker/DatePicker.js +2 -2
  22. package/es/components/DatePicker/plugins/rangePlugin.d.ts +1 -1
  23. package/es/components/FileUploader/FileUploader.js +1 -1
  24. package/es/components/FileUploader/FileUploaderButton.js +2 -2
  25. package/es/components/FileUploader/FileUploaderDropContainer.js +13 -7
  26. package/es/components/FileUploader/FileUploaderItem.js +2 -2
  27. package/es/components/FormLabel/FormLabel.d.ts +2 -2
  28. package/es/components/FormLabel/FormLabel.js +1 -1
  29. package/es/components/Loading/Loading.js +82 -2
  30. package/es/components/Menu/Menu.js +2 -2
  31. package/es/components/Menu/MenuItem.js +2 -2
  32. package/es/components/Modal/Modal.js +3 -3
  33. package/es/components/MultiSelect/FilterableMultiSelect.js +2 -2
  34. package/es/components/MultiSelect/MultiSelect.js +2 -2
  35. package/es/components/Notification/Notification.js +2 -2
  36. package/es/components/NumberInput/NumberInput.js +2 -2
  37. package/es/components/OverflowMenu/OverflowMenu.js +2 -2
  38. package/es/components/OverflowMenuItem/OverflowMenuItem.js +1 -1
  39. package/es/components/Pagination/Pagination.d.ts +1 -1
  40. package/es/components/Pagination/Pagination.js +52 -53
  41. package/es/components/Popover/index.js +1 -1
  42. package/es/components/RadioTile/RadioTile.js +2 -2
  43. package/es/components/Search/Search.js +2 -2
  44. package/es/components/Slider/Slider.js +2 -2
  45. package/es/components/Tabs/Tabs.js +15 -4
  46. package/es/components/Tile/Tile.js +3 -3
  47. package/es/components/Toggletip/index.js +2 -2
  48. package/es/components/Tooltip/DefinitionTooltip.js +2 -2
  49. package/es/components/Tooltip/Tooltip.js +2 -2
  50. package/es/components/TreeView/TreeNode.js +2 -2
  51. package/es/components/TreeView/TreeView.js +1 -1
  52. package/es/components/UIShell/HeaderContainer.js +1 -1
  53. package/es/components/UIShell/HeaderMenu.js +2 -2
  54. package/es/components/UIShell/HeaderPanel.js +2 -2
  55. package/es/components/UIShell/SideNav.js +2 -2
  56. package/es/index.d.ts +2 -1
  57. package/es/index.js +1 -1
  58. package/es/internal/DisplayBox.d.ts +14 -0
  59. package/es/internal/getSupportedLocale.d.ts +12 -0
  60. package/lib/components/Accordion/AccordionItem.d.ts +5 -0
  61. package/lib/components/Accordion/AccordionItem.js +0 -6
  62. package/lib/components/BigNumber/BigNumber.d.ts +82 -0
  63. package/lib/components/BigNumber/BigNumberSkeleton.d.ts +16 -0
  64. package/lib/components/BigNumber/constants.d.ts +19 -0
  65. package/lib/components/BigNumber/index.d.ts +9 -0
  66. package/lib/components/Card/Card.d.ts +1 -1
  67. package/lib/components/Card/Card.js +19 -7
  68. package/lib/components/Card/Card.types.d.ts +38 -7
  69. package/lib/components/Card/CardActions.js +1 -1
  70. package/lib/components/Card/CardBody.d.ts +2 -1
  71. package/lib/components/Card/CardBody.js +3 -2
  72. package/lib/components/Card/CardFooter.d.ts +5 -1
  73. package/lib/components/Card/CardFooter.js +13 -2
  74. package/lib/components/Card/CardTitle.d.ts +1 -1
  75. package/lib/components/ComboBox/ComboBox.js +2 -2
  76. package/lib/components/ComposedModal/ComposedModal.js +2 -2
  77. package/lib/components/ContentSwitcher/ContentSwitcher.js +2 -2
  78. package/lib/components/DatePicker/DatePicker.d.ts +1 -1
  79. package/lib/components/DatePicker/DatePicker.js +2 -2
  80. package/lib/components/DatePicker/plugins/rangePlugin.d.ts +1 -1
  81. package/lib/components/FileUploader/FileUploader.js +1 -1
  82. package/lib/components/FileUploader/FileUploaderButton.js +2 -2
  83. package/lib/components/FileUploader/FileUploaderDropContainer.js +13 -7
  84. package/lib/components/FileUploader/FileUploaderItem.js +2 -2
  85. package/lib/components/FormLabel/FormLabel.d.ts +2 -2
  86. package/lib/components/FormLabel/FormLabel.js +1 -1
  87. package/lib/components/Loading/Loading.js +81 -1
  88. package/lib/components/Menu/Menu.js +2 -2
  89. package/lib/components/Menu/MenuItem.js +2 -2
  90. package/lib/components/Modal/Modal.js +3 -3
  91. package/lib/components/MultiSelect/FilterableMultiSelect.js +2 -2
  92. package/lib/components/MultiSelect/MultiSelect.js +2 -2
  93. package/lib/components/Notification/Notification.js +2 -2
  94. package/lib/components/NumberInput/NumberInput.js +2 -2
  95. package/lib/components/OverflowMenu/OverflowMenu.js +2 -2
  96. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +1 -1
  97. package/lib/components/Pagination/Pagination.d.ts +1 -1
  98. package/lib/components/Pagination/Pagination.js +52 -53
  99. package/lib/components/Popover/index.js +1 -1
  100. package/lib/components/RadioTile/RadioTile.js +2 -2
  101. package/lib/components/Search/Search.js +2 -2
  102. package/lib/components/Slider/Slider.js +2 -2
  103. package/lib/components/Tabs/Tabs.js +15 -4
  104. package/lib/components/Tile/Tile.js +3 -3
  105. package/lib/components/Toggletip/index.js +2 -2
  106. package/lib/components/Tooltip/DefinitionTooltip.js +2 -2
  107. package/lib/components/Tooltip/Tooltip.js +2 -2
  108. package/lib/components/TreeView/TreeNode.js +2 -2
  109. package/lib/components/TreeView/TreeView.js +1 -1
  110. package/lib/components/UIShell/HeaderContainer.js +1 -1
  111. package/lib/components/UIShell/HeaderMenu.js +2 -2
  112. package/lib/components/UIShell/HeaderPanel.js +2 -2
  113. package/lib/components/UIShell/SideNav.js +2 -2
  114. package/lib/index.d.ts +2 -1
  115. package/lib/index.js +1 -1
  116. package/lib/internal/DisplayBox.d.ts +14 -0
  117. package/lib/internal/getSupportedLocale.d.ts +12 -0
  118. package/package.json +21 -21
  119. package/scss/_border-radius.scss +9 -0
  120. package/scss/components/OptionsTile/_index.scss +5 -0
  121. package/scss/components/OptionsTile/_options-tile.scss +5 -0
  122. package/scss/components/big-number/_big-number.scss +9 -0
  123. package/scss/components/big-number/_index.scss +9 -0
  124. package/scss/components/coachmark/_coachmark.scss +5 -0
  125. package/scss/components/coachmark/_index.scss +5 -0
  126. package/scss/components/edit-in-place/_edit-in-place.scss +5 -0
  127. package/scss/components/edit-in-place/_index.scss +5 -0
  128. package/scss/components/full-page-error/_full-page-error.scss +5 -0
  129. package/scss/components/full-page-error/_index.scss +5 -0
  130. package/scss/components/interstitial-screen/_index.scss +6 -0
  131. package/scss/components/interstitial-screen/_interstitial-screen.scss +12 -0
  132. package/scss/components/scroll-gradient/_index.scss +9 -0
  133. package/scss/components/scroll-gradient/_scroll-gradient.scss +9 -0
  134. package/scss/components/user-avatar/_index.scss +9 -0
  135. package/scss/components/user-avatar/_user-avatar.scss +9 -0
  136. package/telemetry.yml +91 -3
@@ -8,10 +8,10 @@
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
13
+ const require_keys = require("../../internal/keyboard/keys.js");
14
+ const require_match = require("../../internal/keyboard/match.js");
15
15
  const require_Button = require("../Button/Button.js");
16
16
  let react = require("react");
17
17
  react = require_runtime.__toESM(react);
@@ -8,10 +8,10 @@
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
13
+ const require_keys = require("../../internal/keyboard/keys.js");
14
+ const require_match = require("../../internal/keyboard/match.js");
15
15
  const require_events = require("../../tools/events.js");
16
16
  let react = require("react");
17
17
  react = require_runtime.__toESM(react);
@@ -57,13 +57,13 @@ function FileUploaderDropContainer({ accept = [], className, id, disabled, label
57
57
  return acc.concat([curr]);
58
58
  }, []);
59
59
  }
60
- const handleFiles = (event, files) => {
61
- if (!files.length) return onAddFiles(event, { addedFiles: [] });
62
- return onAddFiles(event, { addedFiles: validateFiles(multiple ? files : [files[0]]) });
60
+ const getAddedFiles = (files) => {
61
+ if (!files.length) return [];
62
+ return validateFiles(multiple ? files : [files[0]]);
63
63
  };
64
64
  const handleChange = (event) => {
65
65
  const files = [...event.target.files ?? []];
66
- return handleFiles(event, files);
66
+ return onAddFiles(event, { addedFiles: getAddedFiles(files) });
67
67
  };
68
68
  const handleDrop = (event) => {
69
69
  const items = [...event.dataTransfer.items ?? []];
@@ -74,7 +74,13 @@ function FileUploaderDropContainer({ accept = [], className, id, disabled, label
74
74
  if (file) acc.push(file);
75
75
  return acc;
76
76
  }, []) : [...event.dataTransfer.files];
77
- return handleFiles(event, files);
77
+ const addedFiles = getAddedFiles(files);
78
+ if (inputRef.current) try {
79
+ const dataTransfer = new DataTransfer();
80
+ addedFiles.forEach((file) => dataTransfer.items.add(file));
81
+ inputRef.current.files = dataTransfer.files;
82
+ } catch {}
83
+ return onAddFiles(event, { addedFiles });
78
84
  };
79
85
  const handleClick = () => {
80
86
  if (!disabled) inputRef.current?.click();
@@ -9,10 +9,10 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
11
  const require_Text = require("../Text/Text.js");
12
- const require_keys = require("../../internal/keyboard/keys.js");
13
- const require_match = require("../../internal/keyboard/match.js");
14
12
  const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
15
13
  const require_useId = require("../../internal/useId.js");
14
+ const require_keys = require("../../internal/keyboard/keys.js");
15
+ const require_match = require("../../internal/keyboard/match.js");
16
16
  const require_Tooltip = require("../Tooltip/Tooltip.js");
17
17
  const require_Filename = require("./Filename.js");
18
18
  let react = require("react");
@@ -16,7 +16,7 @@ export interface FormLabelProps extends Omit<React.LabelHTMLAttributes<HTMLLabel
16
16
  */
17
17
  className?: string;
18
18
  /**
19
- * Provide a unique id for the given <FormLabel>
19
+ * Provide a unique id for the given `FormLabel`
20
20
  */
21
21
  id?: string;
22
22
  }
@@ -32,7 +32,7 @@ declare namespace FormLabel {
32
32
  */
33
33
  className: PropTypes.Requireable<string>;
34
34
  /**
35
- * Provide a unique id for the given <FormLabel>
35
+ * Provide a unique id for the given `FormLabel`
36
36
  */
37
37
  id: PropTypes.Requireable<string>;
38
38
  };
@@ -42,7 +42,7 @@ FormLabel.propTypes = {
42
42
  */
43
43
  className: prop_types.default.string,
44
44
  /**
45
- * Provide a unique id for the given <FormLabel>
45
+ * Provide a unique id for the given `FormLabel`
46
46
  */
47
47
  id: prop_types.default.string
48
48
  };
@@ -8,6 +8,8 @@
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_keys = require("../../internal/keyboard/keys.js");
12
+ const require_match = require("../../internal/keyboard/match.js");
11
13
  let react = require("react");
12
14
  react = require_runtime.__toESM(react);
13
15
  let classnames = require("classnames");
@@ -22,8 +24,78 @@ let react_jsx_runtime = require("react/jsx-runtime");
22
24
  * This source code is licensed under the Apache-2.0 license found in the
23
25
  * LICENSE file in the root directory of this source tree.
24
26
  */
27
+ const isModalDialog = (element) => {
28
+ if (element.matches("[aria-modal=\"true\"]")) return true;
29
+ if (!(element instanceof HTMLDialogElement) || !element.open) return false;
30
+ try {
31
+ return element.matches(":modal");
32
+ } catch {
33
+ return true;
34
+ }
35
+ };
36
+ const isLayeredOnTop = (target, overlay) => {
37
+ if (!(target instanceof Element)) return false;
38
+ for (let element = target; element; element = element.parentElement) if (isModalDialog(element)) return !element.contains(overlay);
39
+ return false;
40
+ };
41
+ const focusWithBorrowedTabIndex = (element) => {
42
+ const hadTabIndex = element.hasAttribute("tabindex");
43
+ if (!hadTabIndex) element.setAttribute("tabindex", "-1");
44
+ element.focus();
45
+ if (hadTabIndex) return;
46
+ if (document.activeElement === element) element.addEventListener("blur", () => element.removeAttribute("tabindex"), { once: true });
47
+ else element.removeAttribute("tabindex");
48
+ };
49
+ const restoreFocus = (overlay, previouslyFocused) => {
50
+ const activeElement = document.activeElement;
51
+ if (!(!activeElement || activeElement === document.body || overlay.contains(activeElement)) || !previouslyFocused?.isConnected) return;
52
+ previouslyFocused.focus();
53
+ if (document.activeElement === previouslyFocused) return;
54
+ const fallback = previouslyFocused.parentElement;
55
+ if (!fallback || fallback === document.body || fallback === document.documentElement) return;
56
+ focusWithBorrowedTabIndex(fallback);
57
+ };
58
+ const useFocusTrap = (overlayRef, active) => {
59
+ (0, react.useEffect)(() => {
60
+ const overlay = overlayRef.current;
61
+ if (!active || !overlay) return;
62
+ const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;
63
+ if (!isLayeredOnTop(previouslyFocused, overlay)) overlay.focus();
64
+ let reclaiming = false;
65
+ const reclaimFocus = () => {
66
+ if (reclaiming) return;
67
+ reclaiming = true;
68
+ try {
69
+ overlay.focus();
70
+ } finally {
71
+ reclaiming = false;
72
+ }
73
+ };
74
+ const handleFocusIn = (event) => {
75
+ const { target } = event;
76
+ if (!(target instanceof Node) || overlay.contains(target)) return;
77
+ if (isLayeredOnTop(target, overlay)) return;
78
+ reclaimFocus();
79
+ };
80
+ const handleKeyDown = (event) => {
81
+ if (!require_match.match(event, require_keys.Tab)) return;
82
+ if (isLayeredOnTop(event.target, overlay)) return;
83
+ event.preventDefault();
84
+ reclaimFocus();
85
+ };
86
+ document.addEventListener("focusin", handleFocusIn, true);
87
+ document.addEventListener("keydown", handleKeyDown, true);
88
+ return () => {
89
+ document.removeEventListener("focusin", handleFocusIn, true);
90
+ document.removeEventListener("keydown", handleKeyDown, true);
91
+ restoreFocus(overlay, previouslyFocused);
92
+ };
93
+ }, [overlayRef, active]);
94
+ };
25
95
  function Loading({ active = true, className: customClassName, withOverlay = true, small = false, description = "loading", ...rest }) {
26
96
  const prefix = require_usePrefix.usePrefix();
97
+ const overlayRef = (0, react.useRef)(null);
98
+ useFocusTrap(overlayRef, withOverlay && active);
27
99
  const loadingClassName = (0, classnames.default)(customClassName, {
28
100
  [`${prefix}--loading`]: true,
29
101
  [`${prefix}--loading--small`]: small,
@@ -62,7 +134,15 @@ function Loading({ active = true, className: customClassName, withOverlay = true
62
134
  });
63
135
  return withOverlay ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
64
136
  className: overlayClassName,
65
- children: loading
137
+ role: "presentation",
138
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
139
+ ref: overlayRef,
140
+ role: active ? "dialog" : void 0,
141
+ "aria-modal": active ? "true" : void 0,
142
+ "aria-label": active ? description : void 0,
143
+ tabIndex: active ? -1 : void 0,
144
+ children: loading
145
+ })
66
146
  }) : loading;
67
147
  }
68
148
  Loading.propTypes = {
@@ -7,10 +7,10 @@
7
7
 
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_usePrefix = require("../../internal/usePrefix.js");
10
- const require_keys = require("../../internal/keyboard/keys.js");
11
- const require_match = require("../../internal/keyboard/match.js");
12
10
  const require_deprecate = require("../../prop-types/deprecate.js");
13
11
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
12
+ const require_keys = require("../../internal/keyboard/keys.js");
13
+ const require_match = require("../../internal/keyboard/match.js");
14
14
  const require_MenuContext = require("./MenuContext.js");
15
15
  const require_useLayoutDirection = require("../LayoutDirection/useLayoutDirection.js");
16
16
  const require_environment = require("../../internal/environment.js");
@@ -8,11 +8,11 @@
8
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
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_defaultItemToString = require("../../internal/defaultItemToString.js");
15
13
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
14
+ const require_keys = require("../../internal/keyboard/keys.js");
15
+ const require_match = require("../../internal/keyboard/match.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");
@@ -10,13 +10,13 @@ const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_warning = require("../../internal/warning.js");
11
11
  const require_usePrefix = require("../../internal/usePrefix.js");
12
12
  const require_Text = require("../Text/Text.js");
13
- const require_keys = require("../../internal/keyboard/keys.js");
14
- const require_match = require("../../internal/keyboard/match.js");
15
- const require_navigation = require("../../internal/keyboard/navigation.js");
16
13
  const require_useId = require("../../internal/useId.js");
17
14
  const require_deprecate = require("../../prop-types/deprecate.js");
18
15
  const require_utils = require("../../internal/utils.js");
19
16
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
17
+ const require_keys = require("../../internal/keyboard/keys.js");
18
+ const require_match = require("../../internal/keyboard/match.js");
19
+ const require_navigation = require("../../internal/keyboard/navigation.js");
20
20
  const require_index = require("../FeatureFlags/index.js");
21
21
  const require_index$1 = require("../IconButton/index.js");
22
22
  const require_index$2 = require("../Button/index.js");
@@ -7,14 +7,14 @@
7
7
 
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_usePrefix = require("../../internal/usePrefix.js");
10
- const require_keys = require("../../internal/keyboard/keys.js");
11
- const require_match = require("../../internal/keyboard/match.js");
12
10
  const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
15
13
  const require_defaultItemToString = require("../../internal/defaultItemToString.js");
16
14
  const require_isItemDisabled = require("../../internal/isItemDisabled.js");
17
15
  const require_utils = require("../../internal/utils.js");
16
+ const require_keys = require("../../internal/keyboard/keys.js");
17
+ const require_match = require("../../internal/keyboard/match.js");
18
18
  const require_index = require("../AILabel/index.js");
19
19
  const require_mergeRefs = require("../../tools/mergeRefs.js");
20
20
  const require_hasHelperText = require("../../internal/hasHelperText.js");
@@ -8,14 +8,14 @@
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
14
12
  const require_useId = require("../../internal/useId.js");
15
13
  const require_deprecate = require("../../prop-types/deprecate.js");
16
14
  const require_defaultItemToString = require("../../internal/defaultItemToString.js");
17
15
  const require_isItemDisabled = require("../../internal/isItemDisabled.js");
18
16
  const require_utils = require("../../internal/utils.js");
17
+ const require_keys = require("../../internal/keyboard/keys.js");
18
+ const require_match = require("../../internal/keyboard/match.js");
19
19
  const require_index = require("../FeatureFlags/index.js");
20
20
  const require_index$1 = require("../AILabel/index.js");
21
21
  const require_mergeRefs = require("../../tools/mergeRefs.js");
@@ -10,12 +10,12 @@ const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_warning = require("../../internal/warning.js");
11
11
  const require_usePrefix = require("../../internal/usePrefix.js");
12
12
  const require_Text = require("../Text/Text.js");
13
- const require_keys = require("../../internal/keyboard/keys.js");
14
- const require_match = require("../../internal/keyboard/match.js");
15
13
  const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
16
14
  const require_useId = require("../../internal/useId.js");
17
15
  const require_deprecate = require("../../prop-types/deprecate.js");
18
16
  const require_deprecateValuesWithin = require("../../prop-types/deprecateValuesWithin.js");
17
+ const require_keys = require("../../internal/keyboard/keys.js");
18
+ const require_match = require("../../internal/keyboard/match.js");
19
19
  const require_index = require("../FeatureFlags/index.js");
20
20
  const require_useNoInteractiveChildren = require("../../internal/useNoInteractiveChildren.js");
21
21
  const require_index$1 = require("../Button/index.js");
@@ -8,11 +8,11 @@
8
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
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_deprecate = require("../../prop-types/deprecate.js");
14
12
  const require_utils = require("../../internal/utils.js");
15
13
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
14
+ const require_keys = require("../../internal/keyboard/keys.js");
15
+ const require_match = require("../../internal/keyboard/match.js");
16
16
  const require_index = require("../AILabel/index.js");
17
17
  const require_useControllableState = require("../../internal/useControllableState.js");
18
18
  const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
@@ -8,11 +8,11 @@
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_setupGetInstanceId = require("../../tools/setupGetInstanceId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
15
13
  const require_deprecateValuesWithin = require("../../prop-types/deprecateValuesWithin.js");
14
+ const require_keys = require("../../internal/keyboard/keys.js");
15
+ const require_match = require("../../internal/keyboard/match.js");
16
16
  const require_mapPopoverAlign = require("../../tools/mapPopoverAlign.js");
17
17
  const require_index = require("../IconButton/index.js");
18
18
  const require_mergeRefs = require("../../tools/mergeRefs.js");
@@ -9,9 +9,9 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_warning = require("../../internal/warning.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
11
  const require_Text = require("../Text/Text.js");
12
+ const require_useId = require("../../internal/useId.js");
12
13
  const require_keys = require("../../internal/keyboard/keys.js");
13
14
  const require_match = require("../../internal/keyboard/match.js");
14
- const require_useId = require("../../internal/useId.js");
15
15
  let react = require("react");
16
16
  react = require_runtime.__toESM(react);
17
17
  let classnames = require("classnames");
@@ -108,7 +108,7 @@ export interface PaginationProps extends Omit<React.HTMLAttributes<HTMLDivElemen
108
108
  /**
109
109
  * The choices for `pageSize`.
110
110
  */
111
- pageSizes: number[] | PaginationPageSize[];
111
+ pageSizes?: Array<number | PaginationPageSize>;
112
112
  /**
113
113
  * The translatable text showing the current page.
114
114
  */
@@ -30,14 +30,11 @@ react_fast_compare = require_runtime.__toESM(react_fast_compare);
30
30
  * This source code is licensed under the Apache-2.0 license found in the
31
31
  * LICENSE file in the root directory of this source tree.
32
32
  */
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),
38
- value: size
39
- }));
40
- };
33
+ const mapPageSizesToObject = (sizes) => sizes && sizes.length ? sizes.map((size) => typeof size === "object" ? size : {
34
+ text: String(size),
35
+ value: size
36
+ }) : void 0;
37
+ const DEFAULT_PAGE_SIZE = 10;
41
38
  function renderSelectItems(total) {
42
39
  let counter = 1;
43
40
  const itemArr = [];
@@ -51,12 +48,11 @@ function renderSelectItems(total) {
51
48
  return itemArr;
52
49
  }
53
50
  const getPageSize = (pageSizes, pageSize) => {
54
- if (typeof pageSize !== "undefined") {
55
- if (pageSizes.find((size) => {
56
- return pageSize === size.value;
57
- })) return pageSize;
51
+ if (!pageSizes) {
52
+ const resolved = pageSize ?? DEFAULT_PAGE_SIZE;
53
+ return resolved > 0 ? resolved : DEFAULT_PAGE_SIZE;
58
54
  }
59
- return pageSizes[0].value;
55
+ return typeof pageSize !== "undefined" && pageSizes.some((size) => pageSize === size.value) ? pageSize : pageSizes[0].value;
60
56
  };
61
57
  const Pagination = react.default.forwardRef(({ backwardText = "Previous page", backwardTextTooltipPosition = "top", className: customClassName = "", disabled = false, forwardText = "Next page", forwardTextTooltipPosition = "top", 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, renderPageSelect, pageSize: controlledPageSize, pageSizeInputDisabled, pageSizes: controlledPageSizes, pageText = (page) => `page ${page}`, pagesUnknown = false, size = "md", totalItems, ...rest }, ref) => {
62
58
  const prefix = require_usePrefix.usePrefix();
@@ -93,6 +89,13 @@ const Pagination = react.default.forwardRef(({ backwardText = "Previous page", b
93
89
  [`${prefix}--pagination__button--no-index`]: forwardButtonDisabled
94
90
  });
95
91
  const selectItems = renderPageSelect ? [] : renderSelectItems(totalPages);
92
+ const pageSelectNode = pagesUnknown ? null : renderPageSelect?.({
93
+ currentPage: page,
94
+ totalPages,
95
+ currentPageSize: pageSize,
96
+ pageSelectLabelText: pageSelectLabelText(totalPages),
97
+ onSetPage: handleSetPage
98
+ }) ?? null;
96
99
  const focusMap = {
97
100
  backward: backBtnRef,
98
101
  forward: forwardBtnRef
@@ -121,7 +124,13 @@ const Pagination = react.default.forwardRef(({ backwardText = "Previous page", b
121
124
  setPage(controlledPage);
122
125
  }, [controlledPage]);
123
126
  (0, react.useEffect)(() => {
124
- if (typeof prevControlledPageSizes === "undefined" || (0, react_fast_compare.default)(prevControlledPageSizes, normalizedControlledPageSizes)) return;
127
+ if ((0, react_fast_compare.default)(prevControlledPageSizes, normalizedControlledPageSizes)) return;
128
+ if (!normalizedControlledPageSizes) {
129
+ const nextPageSize = getPageSize(void 0, controlledPageSize);
130
+ setPageSizes(void 0);
131
+ setPageSize(nextPageSize);
132
+ return;
133
+ }
125
134
  setPageSizes((prev) => (0, react_fast_compare.default)(normalizedControlledPageSizes, prev) ? prev : normalizedControlledPageSizes);
126
135
  const nextPageSize = getPageSize(normalizedControlledPageSizes, controlledPageSize ?? pageSize);
127
136
  const hasPageSize = normalizedControlledPageSizes.some((size) => {
@@ -209,46 +218,36 @@ const Pagination = react.default.forwardRef(({ backwardText = "Previous page", b
209
218
  ref,
210
219
  ...rest,
211
220
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
212
- className: `${prefix}--pagination__left`,
213
- children: [
214
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
215
- id: `${prefix}-pagination-select-${inputId}-count-label`,
216
- className: `${prefix}--pagination__text`,
217
- htmlFor: `${prefix}-pagination-select-${inputId}`,
218
- children: itemsPerPageText
219
- }),
220
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
221
- id: `${prefix}-pagination-select-${inputId}`,
222
- className: `${prefix}--select__item-count`,
223
- labelText: "",
224
- hideLabel: true,
225
- noLabel: true,
226
- inline: true,
227
- onChange: handleSizeChange,
228
- disabled: pageSizeInputDisabled || disabled,
229
- value: pageSize,
230
- children: pageSizes.map((sizeObj) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$2.default, {
231
- value: sizeObj.value,
232
- text: String(sizeObj.text)
233
- }, sizeObj.value))
234
- }),
235
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
236
- className: `${prefix}--pagination__text ${prefix}--pagination__items-count`,
237
- children: pagesUnknown || !totalItems ? totalItems === 0 ? itemRangeText(0, 0, 0) : itemText(pageSize * (page - 1) + 1, page * pageSize) : itemRangeText(Math.min(pageSize * (page - 1) + 1, totalItems), Math.min(page * pageSize, totalItems), totalItems)
238
- })
239
- ]
221
+ className: (0, classnames.default)(`${prefix}--pagination__left`, { [`${prefix}--pagination__left--no-sizer`]: !pageSizes }),
222
+ children: [pageSizes && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
223
+ id: `${prefix}-pagination-select-${inputId}-count-label`,
224
+ className: `${prefix}--pagination__text`,
225
+ htmlFor: `${prefix}-pagination-select-${inputId}`,
226
+ children: itemsPerPageText
227
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
228
+ id: `${prefix}-pagination-select-${inputId}`,
229
+ className: `${prefix}--select__item-count`,
230
+ labelText: "",
231
+ hideLabel: true,
232
+ noLabel: true,
233
+ inline: true,
234
+ onChange: handleSizeChange,
235
+ disabled: pageSizeInputDisabled || disabled,
236
+ value: pageSize,
237
+ children: pageSizes.map((sizeObj) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$2.default, {
238
+ value: sizeObj.value,
239
+ text: String(sizeObj.text)
240
+ }, sizeObj.value))
241
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
242
+ className: `${prefix}--pagination__text ${prefix}--pagination__items-count`,
243
+ children: pagesUnknown || !totalItems ? totalItems === 0 ? itemRangeText(0, 0, 0) : itemText(pageSize * (page - 1) + 1, page * pageSize) : itemRangeText(Math.min(pageSize * (page - 1) + 1, totalItems), Math.min(page * pageSize, totalItems), totalItems)
244
+ })]
240
245
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
241
- className: `${prefix}--pagination__right`,
246
+ className: (0, classnames.default)(`${prefix}--pagination__right`, { [`${prefix}--pagination__right--no-content`]: !pagesUnknown && !!renderPageSelect }),
242
247
  children: [pagesUnknown ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
243
248
  className: `${prefix}--pagination__text ${prefix}--pagination__page-text ${prefix}--pagination__unknown-pages-text`,
244
249
  children: pageText(page)
245
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [renderPageSelect ? renderPageSelect({
246
- currentPage: page,
247
- totalPages,
248
- currentPageSize: pageSize,
249
- pageSelectLabelText: pageSelectLabelText(totalPages),
250
- onSetPage: handleSetPage
251
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
250
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [renderPageSelect ? pageSelectNode : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
252
251
  id: `${prefix}-pagination-select-${inputId}-right`,
253
252
  className: `${prefix}--select__page-number`,
254
253
  labelText: pageSelectLabelText(totalPages),
@@ -260,7 +259,7 @@ const Pagination = react.default.forwardRef(({ backwardText = "Previous page", b
260
259
  children: selectItems
261
260
  }, page), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
262
261
  className: `${prefix}--pagination__text`,
263
- children: pageRangeText(page, totalPages)
262
+ children: pageSelectNode == null && renderPageSelect ? `${page} ${pageRangeText(page, totalPages)}` : pageRangeText(page, totalPages)
264
263
  })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
265
264
  className: `${prefix}--pagination__control-buttons`,
266
265
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.IconButton, {
@@ -381,10 +380,10 @@ Pagination.propTypes = {
381
380
  /**
382
381
  * The choices for `pageSize`.
383
382
  */
384
- pageSizes: prop_types.default.oneOfType([prop_types.default.arrayOf(prop_types.default.number.isRequired), prop_types.default.arrayOf(prop_types.default.shape({
383
+ pageSizes: prop_types.default.arrayOf(prop_types.default.oneOfType([prop_types.default.number, prop_types.default.shape({
385
384
  text: prop_types.default.string.isRequired,
386
385
  value: prop_types.default.number.isRequired
387
- }).isRequired)]).isRequired,
386
+ })])),
388
387
  /**
389
388
  * The translatable text showing the current page.
390
389
  */
@@ -7,12 +7,12 @@
7
7
 
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_usePrefix = require("../../internal/usePrefix.js");
10
- const require_navigation = require("../../internal/keyboard/navigation.js");
11
10
  const require_useIsomorphicEffect = require("../../internal/useIsomorphicEffect.js");
12
11
  const require_deprecateValuesWithin = require("../../prop-types/deprecateValuesWithin.js");
13
12
  const require_utils = require("../../internal/utils.js");
14
13
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
15
14
  const require_useEvent = require("../../internal/useEvent.js");
15
+ const require_navigation = require("../../internal/keyboard/navigation.js");
16
16
  const require_mapPopoverAlign = require("../../tools/mapPopoverAlign.js");
17
17
  const require_index = require("../FeatureFlags/index.js");
18
18
  let react = require("react");
@@ -9,11 +9,11 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
11
  const require_Text = require("../Text/Text.js");
12
- const require_keys = require("../../internal/keyboard/keys.js");
13
- const require_match = require("../../internal/keyboard/match.js");
14
12
  const require_useId = require("../../internal/useId.js");
15
13
  const require_deprecate = require("../../prop-types/deprecate.js");
16
14
  const require_utils = require("../../internal/utils.js");
15
+ const require_keys = require("../../internal/keyboard/keys.js");
16
+ const require_match = require("../../internal/keyboard/match.js");
17
17
  const require_index = require("../FeatureFlags/index.js");
18
18
  const require_index$1 = require("../AILabel/index.js");
19
19
  let react = require("react");
@@ -8,11 +8,11 @@
8
8
  const require_runtime = require("../../_virtual/_rolldown/runtime.js");
9
9
  const require_noopFn = require("../../internal/noopFn.js");
10
10
  const require_usePrefix = require("../../internal/usePrefix.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
15
13
  const require_useMergedRefs = require("../../internal/useMergedRefs.js");
14
+ const require_keys = require("../../internal/keyboard/keys.js");
15
+ const require_match = require("../../internal/keyboard/match.js");
16
16
  const require_Tooltip = require("../Tooltip/Tooltip.js");
17
17
  const require_events = require("../../tools/events.js");
18
18
  const require_FormContext = require("../FluidForm/FormContext.js");
@@ -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_Text = require("../Text/Text.js");
11
- const require_keys = require("../../internal/keyboard/keys.js");
12
- const require_match = require("../../internal/keyboard/match.js");
13
11
  const require_useId = require("../../internal/useId.js");
14
12
  const require_deprecate = require("../../prop-types/deprecate.js");
13
+ const require_keys = require("../../internal/keyboard/keys.js");
14
+ const require_match = require("../../internal/keyboard/match.js");
15
15
  const require_Tooltip = require("../Tooltip/Tooltip.js");
16
16
  const require_useNormalizedInputProps = require("../../internal/useNormalizedInputProps.js");
17
17
  const require_clamp = require("../../internal/clamp.js");