@carbon/react 1.31.3 → 1.32.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 (190) hide show
  1. package/README.md +1 -1
  2. package/es/components/Accordion/Accordion.Skeleton.d.ts +64 -0
  3. package/es/components/Accordion/Accordion.Skeleton.js +3 -3
  4. package/es/components/Accordion/Accordion.d.ts +65 -0
  5. package/es/components/Accordion/Accordion.js +5 -6
  6. package/es/components/Accordion/AccordionItem.d.ts +105 -0
  7. package/es/components/Accordion/AccordionItem.js +12 -9
  8. package/es/components/Accordion/AccordionProvider.d.ts +20 -0
  9. package/es/components/Accordion/AccordionProvider.js +25 -0
  10. package/es/components/Accordion/index.d.ts +11 -0
  11. package/es/components/Button/Button.Skeleton.d.ts +28 -0
  12. package/es/components/Button/Button.Skeleton.js +5 -3
  13. package/es/components/Button/Button.d.ts +72 -0
  14. package/es/components/Button/Button.js +13 -10
  15. package/es/components/Button/index.d.ts +11 -0
  16. package/es/components/Button/index.js +2 -1
  17. package/es/components/ButtonSet/ButtonSet.d.ts +17 -0
  18. package/es/components/ButtonSet/ButtonSet.js +1 -2
  19. package/es/components/ButtonSet/index.d.ts +9 -0
  20. package/es/components/CodeSnippet/CodeSnippet.js +1 -0
  21. package/es/components/ComboButton/index.js +1 -0
  22. package/es/components/ComposedModal/ComposedModal.d.ts +70 -0
  23. package/es/components/ComposedModal/ComposedModal.js +58 -67
  24. package/es/components/ComposedModal/ModalFooter.d.ts +71 -0
  25. package/es/components/ComposedModal/ModalFooter.js +22 -19
  26. package/es/components/ComposedModal/ModalHeader.d.ts +58 -0
  27. package/es/components/ComposedModal/ModalHeader.js +8 -25
  28. package/es/components/ComposedModal/index.d.ts +9 -0
  29. package/es/components/ContainedList/ContainedList.js +12 -1
  30. package/es/components/ContentSwitcher/ContentSwitcher.d.ts +109 -0
  31. package/es/components/ContentSwitcher/ContentSwitcher.js +14 -6
  32. package/es/components/DangerButton/DangerButton.d.ts +9 -0
  33. package/es/components/DangerButton/DangerButton.js +2 -2
  34. package/es/components/DangerButton/index.d.ts +9 -0
  35. package/es/components/DataTable/TableBatchAction.js +1 -0
  36. package/es/components/DataTable/TableBatchActions.js +1 -0
  37. package/es/components/DataTable/TableBody.d.ts +29 -0
  38. package/es/components/DataTable/TableBody.js +2 -3
  39. package/es/components/DataTable/TableContainer.d.ts +51 -0
  40. package/es/components/DataTable/TableContainer.js +3 -4
  41. package/es/components/DataTable/TableExpandHeader.d.ts +86 -0
  42. package/es/components/DataTable/TableExpandHeader.js +4 -5
  43. package/es/components/DatePicker/plugins/fixEventsPlugin.js +12 -16
  44. package/es/components/Dropdown/Dropdown.js +1 -0
  45. package/es/components/FluidTextInput/FluidTextInput.js +1 -0
  46. package/es/components/FormGroup/FormGroup.d.ts +80 -0
  47. package/es/components/IconButton/index.js +3 -2
  48. package/es/components/Layout/index.d.ts +74 -0
  49. package/es/components/Layout/index.js +14 -5
  50. package/es/components/Link/Link.d.ts +2 -2
  51. package/es/components/Link/Link.js +2 -1
  52. package/es/components/MenuButton/index.js +1 -0
  53. package/es/components/Modal/Modal.js +1 -0
  54. package/es/components/ModalWrapper/ModalWrapper.js +1 -0
  55. package/es/components/Notification/Notification.d.ts +531 -0
  56. package/es/components/Notification/Notification.js +40 -6
  57. package/es/components/Notification/index.d.ts +7 -0
  58. package/es/components/PrimaryButton/PrimaryButton.js +1 -0
  59. package/es/components/SecondaryButton/SecondaryButton.js +1 -0
  60. package/es/components/Select/Select.d.ts +1 -1
  61. package/es/components/SkeletonText/SkeletonText.d.ts +61 -0
  62. package/es/components/SkeletonText/SkeletonText.js +15 -17
  63. package/es/components/SkeletonText/index.d.ts +9 -0
  64. package/es/components/Switch/Switch.d.ts +56 -0
  65. package/es/components/Switch/Switch.js +4 -4
  66. package/es/components/Tab/index.d.ts +9 -0
  67. package/es/components/TabContent/TabContent.d.ts +40 -0
  68. package/es/components/TabContent/TabContent.js +6 -12
  69. package/es/components/TabContent/index.d.ts +10 -0
  70. package/es/components/Tabs/Tabs.Skeleton.d.ts +33 -0
  71. package/es/components/Tabs/Tabs.Skeleton.js +2 -2
  72. package/es/components/Tabs/Tabs.d.ts +311 -0
  73. package/es/components/Tabs/Tabs.js +151 -97
  74. package/es/components/Tabs/index.d.ts +10 -0
  75. package/es/components/Tabs/usePressable.js +11 -0
  76. package/es/components/TextInput/ControlledPasswordInput.d.ts +90 -0
  77. package/es/components/TextInput/ControlledPasswordInput.js +5 -6
  78. package/es/components/Tile/Tile.d.ts +153 -0
  79. package/es/components/Tile/Tile.js +62 -74
  80. package/es/components/Tile/index.d.ts +7 -0
  81. package/es/components/Toggle/Toggle.Skeleton.d.ts +3 -47
  82. package/es/components/Toggle/Toggle.Skeleton.js +24 -64
  83. package/es/components/Toggle/Toggle.js +1 -1
  84. package/es/components/UIShell/HeaderGlobalAction.js +1 -0
  85. package/es/components/UIShell/HeaderPanel.js +61 -5
  86. package/es/components/UIShell/SideNav.d.ts +1 -1
  87. package/es/components/UIShell/Switcher.js +45 -5
  88. package/es/components/UIShell/SwitcherItem.js +45 -6
  89. package/es/index.js +16 -16
  90. package/es/internal/keyboard/match.js +2 -2
  91. package/es/internal/useControllableState.js +2 -2
  92. package/es/internal/useMatchMedia.js +44 -0
  93. package/es/internal/wrapFocus.js +6 -6
  94. package/es/prop-types/requiredIfGivenPropIsTruthy.js +1 -1
  95. package/es/prop-types/types.js +3 -0
  96. package/lib/components/Accordion/Accordion.Skeleton.d.ts +64 -0
  97. package/lib/components/Accordion/Accordion.Skeleton.js +3 -3
  98. package/lib/components/Accordion/Accordion.d.ts +65 -0
  99. package/lib/components/Accordion/Accordion.js +5 -6
  100. package/lib/components/Accordion/AccordionItem.d.ts +105 -0
  101. package/lib/components/Accordion/AccordionItem.js +11 -8
  102. package/lib/components/Accordion/AccordionProvider.d.ts +20 -0
  103. package/lib/components/Accordion/AccordionProvider.js +34 -0
  104. package/lib/components/Accordion/index.d.ts +11 -0
  105. package/lib/components/Button/Button.Skeleton.d.ts +28 -0
  106. package/lib/components/Button/Button.Skeleton.js +5 -3
  107. package/lib/components/Button/Button.d.ts +72 -0
  108. package/lib/components/Button/Button.js +18 -11
  109. package/lib/components/Button/index.d.ts +11 -0
  110. package/lib/components/Button/index.js +6 -0
  111. package/lib/components/ButtonSet/ButtonSet.d.ts +17 -0
  112. package/lib/components/ButtonSet/ButtonSet.js +1 -2
  113. package/lib/components/ButtonSet/index.d.ts +9 -0
  114. package/lib/components/CodeSnippet/CodeSnippet.js +1 -0
  115. package/lib/components/ComboButton/index.js +1 -0
  116. package/lib/components/ComposedModal/ComposedModal.d.ts +70 -0
  117. package/lib/components/ComposedModal/ComposedModal.js +58 -67
  118. package/lib/components/ComposedModal/ModalFooter.d.ts +71 -0
  119. package/lib/components/ComposedModal/ModalFooter.js +22 -19
  120. package/lib/components/ComposedModal/ModalHeader.d.ts +58 -0
  121. package/lib/components/ComposedModal/ModalHeader.js +8 -25
  122. package/lib/components/ComposedModal/index.d.ts +9 -0
  123. package/lib/components/ContainedList/ContainedList.js +12 -1
  124. package/lib/components/ContentSwitcher/ContentSwitcher.d.ts +109 -0
  125. package/lib/components/ContentSwitcher/ContentSwitcher.js +14 -6
  126. package/lib/components/DangerButton/DangerButton.d.ts +9 -0
  127. package/lib/components/DangerButton/DangerButton.js +2 -2
  128. package/lib/components/DangerButton/index.d.ts +9 -0
  129. package/lib/components/DataTable/TableBatchAction.js +1 -0
  130. package/lib/components/DataTable/TableBatchActions.js +1 -0
  131. package/lib/components/DataTable/TableBody.d.ts +29 -0
  132. package/lib/components/DataTable/TableBody.js +3 -4
  133. package/lib/components/DataTable/TableContainer.d.ts +51 -0
  134. package/lib/components/DataTable/TableContainer.js +3 -4
  135. package/lib/components/DataTable/TableExpandHeader.d.ts +86 -0
  136. package/lib/components/DataTable/TableExpandHeader.js +4 -5
  137. package/lib/components/DatePicker/plugins/fixEventsPlugin.js +12 -16
  138. package/lib/components/Dropdown/Dropdown.js +1 -0
  139. package/lib/components/FluidTextInput/FluidTextInput.js +1 -0
  140. package/lib/components/FormGroup/FormGroup.d.ts +80 -0
  141. package/lib/components/IconButton/index.js +3 -2
  142. package/lib/components/Layout/index.d.ts +74 -0
  143. package/lib/components/Layout/index.js +14 -5
  144. package/lib/components/Link/Link.d.ts +2 -2
  145. package/lib/components/Link/Link.js +2 -1
  146. package/lib/components/MenuButton/index.js +1 -0
  147. package/lib/components/Modal/Modal.js +1 -0
  148. package/lib/components/ModalWrapper/ModalWrapper.js +1 -0
  149. package/lib/components/Notification/Notification.d.ts +531 -0
  150. package/lib/components/Notification/Notification.js +40 -6
  151. package/lib/components/Notification/index.d.ts +7 -0
  152. package/lib/components/PrimaryButton/PrimaryButton.js +1 -0
  153. package/lib/components/SecondaryButton/SecondaryButton.js +1 -0
  154. package/lib/components/Select/Select.d.ts +1 -1
  155. package/lib/components/SkeletonText/SkeletonText.d.ts +61 -0
  156. package/lib/components/SkeletonText/SkeletonText.js +15 -17
  157. package/lib/components/SkeletonText/index.d.ts +9 -0
  158. package/lib/components/Switch/Switch.d.ts +56 -0
  159. package/lib/components/Switch/Switch.js +4 -4
  160. package/lib/components/Tab/index.d.ts +9 -0
  161. package/lib/components/TabContent/TabContent.d.ts +40 -0
  162. package/lib/components/TabContent/TabContent.js +6 -12
  163. package/lib/components/TabContent/index.d.ts +10 -0
  164. package/lib/components/Tabs/Tabs.Skeleton.d.ts +33 -0
  165. package/lib/components/Tabs/Tabs.Skeleton.js +2 -2
  166. package/lib/components/Tabs/Tabs.d.ts +311 -0
  167. package/lib/components/Tabs/Tabs.js +150 -96
  168. package/lib/components/Tabs/index.d.ts +10 -0
  169. package/lib/components/Tabs/usePressable.js +11 -0
  170. package/lib/components/TextInput/ControlledPasswordInput.d.ts +90 -0
  171. package/lib/components/TextInput/ControlledPasswordInput.js +5 -6
  172. package/lib/components/Tile/Tile.d.ts +153 -0
  173. package/lib/components/Tile/Tile.js +62 -74
  174. package/lib/components/Tile/index.d.ts +7 -0
  175. package/lib/components/Toggle/Toggle.Skeleton.d.ts +3 -47
  176. package/lib/components/Toggle/Toggle.Skeleton.js +22 -62
  177. package/lib/components/Toggle/Toggle.js +1 -1
  178. package/lib/components/UIShell/HeaderGlobalAction.js +1 -0
  179. package/lib/components/UIShell/HeaderPanel.js +60 -4
  180. package/lib/components/UIShell/SideNav.d.ts +1 -1
  181. package/lib/components/UIShell/Switcher.js +44 -4
  182. package/lib/components/UIShell/SwitcherItem.js +45 -6
  183. package/lib/index.js +51 -47
  184. package/lib/internal/keyboard/match.js +2 -2
  185. package/lib/internal/useControllableState.js +2 -2
  186. package/lib/internal/useMatchMedia.js +48 -0
  187. package/lib/internal/wrapFocus.js +6 -6
  188. package/lib/prop-types/requiredIfGivenPropIsTruthy.js +1 -1
  189. package/lib/prop-types/types.js +3 -0
  190. package/package.json +4 -3
@@ -70,12 +70,12 @@ const ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRe
70
70
  id,
71
71
  onChange: evt => {
72
72
  if (!other.disabled) {
73
- onChange(evt);
73
+ onChange?.(evt);
74
74
  }
75
75
  },
76
76
  onClick: evt => {
77
77
  if (!other.disabled) {
78
- onClick(evt);
78
+ onClick?.(evt);
79
79
  }
80
80
  },
81
81
  placeholder,
@@ -114,7 +114,7 @@ const ControlledPasswordInput = /*#__PURE__*/React__default["default"].forwardRe
114
114
  invalid,
115
115
  sharedTextInputProps,
116
116
  invalidId: errorId,
117
- hasHelper: !error && helperText,
117
+ hasHelper: !error && helperText ? true : false,
118
118
  helperId
119
119
  }), {
120
120
  "data-toggle-password-visibility": type === 'password'
@@ -231,8 +231,7 @@ ControlledPasswordInput.defaultProps = {
231
231
  invalid: false,
232
232
  invalidText: '',
233
233
  helperText: '',
234
- size: ''
234
+ size: undefined
235
235
  };
236
- var ControlledPasswordInput$1 = ControlledPasswordInput;
237
236
 
238
- exports["default"] = ControlledPasswordInput$1;
237
+ exports["default"] = ControlledPasswordInput;
@@ -0,0 +1,153 @@
1
+ import React, { type ReactNode, type MouseEvent, type KeyboardEvent, type HTMLAttributes, type ChangeEvent, type ComponentType } from 'react';
2
+ export interface TileProps extends HTMLAttributes<HTMLDivElement> {
3
+ children?: ReactNode;
4
+ className?: string;
5
+ /** @deprecated */
6
+ light?: boolean;
7
+ }
8
+ export declare const Tile: React.ForwardRefExoticComponent<TileProps & React.RefAttributes<HTMLDivElement>>;
9
+ export interface ClickableTileProps extends HTMLAttributes<HTMLAnchorElement> {
10
+ children?: ReactNode;
11
+ className?: string;
12
+ /** @deprecated */
13
+ light?: boolean;
14
+ /**
15
+ * Boolean for whether a tile has been clicked.
16
+ */
17
+ clicked?: boolean;
18
+ /**
19
+ * Specify whether the ClickableTile should be disabled
20
+ */
21
+ disabled?: boolean;
22
+ /**
23
+ * The href for the link.
24
+ */
25
+ href?: string;
26
+ /**
27
+ * Optional prop to allow overriding the icon rendering.
28
+ */
29
+ renderIcon?: ComponentType<{
30
+ className?: string;
31
+ }>;
32
+ /**
33
+ * Specify the function to run when the ClickableTile is clicked
34
+ */
35
+ onClick?(event: MouseEvent): void;
36
+ /**
37
+ * Specify the function to run when the ClickableTile is interacted with via a keyboard
38
+ */
39
+ onKeyDown?(event: KeyboardEvent): void;
40
+ /**
41
+ * The rel property for the link.
42
+ */
43
+ rel?: string;
44
+ }
45
+ export declare const ClickableTile: React.ForwardRefExoticComponent<ClickableTileProps & React.RefAttributes<HTMLAnchorElement>>;
46
+ export interface SelectableTileProps extends HTMLAttributes<HTMLDivElement> {
47
+ children?: ReactNode;
48
+ className?: string;
49
+ /** @deprecated */
50
+ light?: boolean;
51
+ /**
52
+ * Specify whether the SelectableTile should be disabled
53
+ */
54
+ disabled?: boolean;
55
+ /**
56
+ * The ID of the `<input>`.
57
+ */
58
+ id?: string;
59
+ /**
60
+ * The `name` of the `<input>`.
61
+ * @deprecated
62
+ */
63
+ name?: string;
64
+ /**
65
+ * The empty handler of the `<input>`.
66
+ */
67
+ onChange?(event: ChangeEvent<HTMLDivElement>): void;
68
+ /**
69
+ * Specify the function to run when the SelectableTile is clicked
70
+ */
71
+ onClick?(event: MouseEvent<HTMLDivElement>): void;
72
+ /**
73
+ * Specify the function to run when the SelectableTile is interacted with via a keyboard
74
+ */
75
+ onKeyDown?(event: KeyboardEvent<HTMLDivElement>): void;
76
+ /**
77
+ * `true` to select this tile.
78
+ */
79
+ selected?: boolean;
80
+ /**
81
+ * Specify the tab index of the wrapper element
82
+ */
83
+ tabIndex?: number;
84
+ /**
85
+ * The `title` of the `<input>`.
86
+ */
87
+ title?: string;
88
+ /**
89
+ * The value of the `<input>`.
90
+ * @deprecated
91
+ */
92
+ value: string | number;
93
+ }
94
+ export declare const SelectableTile: React.ForwardRefExoticComponent<SelectableTileProps & React.RefAttributes<HTMLDivElement>>;
95
+ export interface ExpandableTileProps extends HTMLAttributes<HTMLDivElement> {
96
+ children?: ReactNode;
97
+ className?: string;
98
+ /** @deprecated */
99
+ light?: boolean;
100
+ /**
101
+ * `true` if the tile is expanded.
102
+ */
103
+ expanded?: boolean;
104
+ /**
105
+ * An ID that can be provided to aria-labelledby
106
+ */
107
+ id?: string;
108
+ /**
109
+ * Specify the function to run when the ExpandableTile is clicked
110
+ */
111
+ onClick?(event: MouseEvent): void;
112
+ /**
113
+ * optional handler to trigger a function when a key is pressed
114
+ */
115
+ onKeyUp?(event: KeyboardEvent): void;
116
+ /**
117
+ * The `tabindex` attribute.
118
+ */
119
+ tabIndex?: number;
120
+ /**
121
+ * The description of the "collapsed" icon that can be read by screen readers.
122
+ */
123
+ tileCollapsedIconText?: string;
124
+ /**
125
+ * When "collapsed", a label to appear next to the chevron (e.g., "View more").
126
+ */
127
+ tileCollapsedLabel?: string;
128
+ /**
129
+ * The description of the "expanded" icon that can be read by screen readers.
130
+ */
131
+ tileExpandedIconText?: string;
132
+ /**
133
+ * When "expanded", a label to appear next to the chevron (e.g., "View less").
134
+ */
135
+ tileExpandedLabel?: string;
136
+ tileMaxHeight?: number;
137
+ tilePadding?: number;
138
+ }
139
+ export declare const ExpandableTile: React.ForwardRefExoticComponent<ExpandableTileProps & React.RefAttributes<HTMLElement>>;
140
+ export interface TileAboveTheFoldContentProps {
141
+ /**
142
+ * The child nodes.
143
+ */
144
+ children?: ReactNode;
145
+ }
146
+ export declare const TileAboveTheFoldContent: React.ForwardRefExoticComponent<TileAboveTheFoldContentProps & React.RefAttributes<HTMLSpanElement>>;
147
+ export interface TileBelowTheFoldContentProps {
148
+ /**
149
+ * The child nodes.
150
+ */
151
+ children?: ReactNode;
152
+ }
153
+ export declare const TileBelowTheFoldContent: React.ForwardRefExoticComponent<TileBelowTheFoldContentProps & React.RefAttributes<HTMLSpanElement>>;
@@ -40,9 +40,7 @@ const Tile = /*#__PURE__*/React__default["default"].forwardRef(function Tile(_re
40
40
  ...rest
41
41
  } = _ref;
42
42
  const prefix = usePrefix.usePrefix();
43
- const tileClasses = cx__default["default"](`${prefix}--tile`, {
44
- [`${prefix}--tile--light`]: light
45
- }, className);
43
+ const tileClasses = cx__default["default"](`${prefix}--tile`, light && `${prefix}--tile--light`, className);
46
44
  return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
47
45
  className: tileClasses,
48
46
  ref: ref
@@ -61,6 +59,8 @@ Tile.propTypes = {
61
59
  /**
62
60
  * `true` to use the light version. For use on $ui-01 backgrounds only.
63
61
  * Don't use this to make tile background color same as container background color.
62
+ *
63
+ * @deprecated
64
64
  */
65
65
  light: deprecate["default"](PropTypes__default["default"].bool, 'The `light` prop for `Tile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.')
66
66
  };
@@ -78,10 +78,7 @@ const ClickableTile = /*#__PURE__*/React__default["default"].forwardRef(function
78
78
  ...rest
79
79
  } = _ref2;
80
80
  const prefix = usePrefix.usePrefix();
81
- const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--clickable`, {
82
- [`${prefix}--tile--is-clicked`]: clicked,
83
- [`${prefix}--tile--light`]: light
84
- }, className);
81
+ const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--clickable`, clicked && `${prefix}--tile--is-clicked`, light && `${prefix}--tile--light`, className);
85
82
  const [isSelected, setIsSelected] = React.useState(clicked);
86
83
  function handleOnClick(evt) {
87
84
  evt.persist();
@@ -113,7 +110,7 @@ const ClickableTile = /*#__PURE__*/React__default["default"].forwardRef(function
113
110
  return /*#__PURE__*/React__default["default"].createElement(Link["default"], _rollupPluginBabelHelpers["extends"]({
114
111
  className: classes,
115
112
  href: href,
116
- onClick: !disabled ? handleOnClick : null,
113
+ onClick: !disabled ? handleOnClick : undefined,
117
114
  onKeyDown: handleOnKeyDown,
118
115
  ref: ref,
119
116
  disabled: disabled
@@ -165,6 +162,7 @@ ClickableTile.propTypes = {
165
162
  * Optional prop to allow overriding the icon rendering.
166
163
  * Can be a React component class
167
164
  */
165
+ // @ts-expect-error: Invalid derived prop type, seemingly no real solution.
168
166
  renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object])
169
167
  };
170
168
  const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(function SelectableTile(_ref3, ref) {
@@ -174,14 +172,12 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
174
172
  disabled,
175
173
  id,
176
174
  light,
177
- name,
178
175
  onClick = () => {},
179
176
  onChange = () => {},
180
177
  onKeyDown = () => {},
181
178
  selected = false,
182
179
  tabIndex = 0,
183
180
  title = 'title',
184
- value = 'value',
185
181
  ...rest
186
182
  } = _ref3;
187
183
  const prefix = usePrefix.usePrefix();
@@ -189,11 +185,7 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
189
185
  const keyDownHandler = onKeyDown;
190
186
  const [isSelected, setIsSelected] = React.useState(selected);
191
187
  const [prevSelected, setPrevSelected] = React.useState(selected);
192
- const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--selectable`, {
193
- [`${prefix}--tile--is-selected`]: isSelected,
194
- [`${prefix}--tile--light`]: light,
195
- [`${prefix}--tile--disabled`]: disabled
196
- }, className);
188
+ const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--selectable`, isSelected && `${prefix}--tile--is-selected`, light && `${prefix}--tile--light`, disabled && `${prefix}--tile--disabled`, className);
197
189
 
198
190
  // TODO: rename to handleClick when handleClick prop is deprecated
199
191
  function handleOnClick(evt) {
@@ -222,38 +214,33 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
222
214
  setIsSelected(selected);
223
215
  setPrevSelected(selected);
224
216
  }
225
- return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
226
- className: classes,
227
- onClick: !disabled ? handleOnClick : null,
228
- role: "checkbox",
229
- "aria-checked": isSelected,
230
- disabled: disabled,
231
- onKeyDown: !disabled ? handleOnKeyDown : null
232
- // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
233
- ,
234
- tabIndex: !disabled ? tabIndex : null,
235
- value: value,
236
- name: name,
237
- ref: ref,
238
- id: id,
239
- onChange: !disabled ? handleChange : null,
240
- title: title
241
- }, rest), /*#__PURE__*/React__default["default"].createElement("span", {
242
- className: `${prefix}--tile__checkmark ${prefix}--tile__checkmark--persistent`
243
- }, isSelected ? _CheckboxCheckedFille || (_CheckboxCheckedFille = /*#__PURE__*/React__default["default"].createElement(iconsReact.CheckboxCheckedFilled, null)) : _Checkbox || (_Checkbox = /*#__PURE__*/React__default["default"].createElement(iconsReact.Checkbox, null))), /*#__PURE__*/React__default["default"].createElement("label", {
244
- htmlFor: id,
245
- className: `${prefix}--tile-content`
246
- }, children));
217
+ return (
218
+ /*#__PURE__*/
219
+ // eslint-disable-next-line jsx-a11y/interactive-supports-focus
220
+ React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
221
+ className: classes,
222
+ onClick: !disabled ? handleOnClick : undefined,
223
+ role: "checkbox",
224
+ "aria-checked": isSelected,
225
+ onKeyDown: !disabled ? handleOnKeyDown : undefined
226
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
227
+ ,
228
+ tabIndex: !disabled ? tabIndex : undefined,
229
+ ref: ref,
230
+ id: id,
231
+ onChange: !disabled ? handleChange : undefined,
232
+ title: title
233
+ }, rest), /*#__PURE__*/React__default["default"].createElement("span", {
234
+ className: `${prefix}--tile__checkmark ${prefix}--tile__checkmark--persistent`
235
+ }, isSelected ? _CheckboxCheckedFille || (_CheckboxCheckedFille = /*#__PURE__*/React__default["default"].createElement(iconsReact.CheckboxCheckedFilled, null)) : _Checkbox || (_Checkbox = /*#__PURE__*/React__default["default"].createElement(iconsReact.Checkbox, null))), /*#__PURE__*/React__default["default"].createElement("label", {
236
+ htmlFor: id,
237
+ className: `${prefix}--tile-content`
238
+ }, children))
239
+ );
247
240
  });
248
241
  SelectableTile.displayName = 'SelectableTile';
249
242
  SelectableTile.propTypes = {
250
- /**
251
- * The child nodes.
252
- */
253
243
  children: PropTypes__default["default"].node,
254
- /**
255
- * The CSS class names.
256
- */
257
244
  className: PropTypes__default["default"].string,
258
245
  /**
259
246
  * Specify whether the SelectableTile should be disabled
@@ -270,6 +257,7 @@ SelectableTile.propTypes = {
270
257
  light: deprecate["default"](PropTypes__default["default"].bool, 'The `light` prop for `SelectableTile` is no longer needed and has been deprecated. It will be removed in the next major release. Use the Layer component instead.'),
271
258
  /**
272
259
  * The `name` of the `<input>`.
260
+ * @deprecated
273
261
  */
274
262
  name: PropTypes__default["default"].string,
275
263
  /**
@@ -298,23 +286,24 @@ SelectableTile.propTypes = {
298
286
  title: PropTypes__default["default"].string,
299
287
  /**
300
288
  * The value of the `<input>`.
289
+ * @deprecated
301
290
  */
302
291
  value: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]).isRequired
303
292
  };
304
293
  const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(function ExpandableTile(_ref4, forwardRef) {
305
294
  let {
306
- tabIndex,
295
+ tabIndex = 0,
307
296
  className,
308
297
  children,
309
- expanded,
310
- tileMaxHeight,
298
+ expanded = false,
299
+ tileMaxHeight = 0,
311
300
  // eslint-disable-line
312
- tilePadding,
301
+ tilePadding = 0,
313
302
  // eslint-disable-line
314
303
  onClick,
315
304
  onKeyUp,
316
- tileCollapsedIconText,
317
- tileExpandedIconText,
305
+ tileCollapsedIconText = 'Interact to expand Tile',
306
+ tileExpandedIconText = 'Interact to collapse Tile',
318
307
  tileCollapsedLabel,
319
308
  tileExpandedLabel,
320
309
  light,
@@ -331,8 +320,8 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
331
320
  const belowTheFold = React.useRef(null);
332
321
  const tileContent = React.useRef(null);
333
322
  const tile = React.useRef(null);
334
- const prefix = usePrefix.usePrefix();
335
323
  const ref = useMergedRefs.useMergedRefs([forwardRef, tile]);
324
+ const prefix = usePrefix.usePrefix();
336
325
  if (expanded !== prevExpanded) {
337
326
  setIsExpanded(expanded);
338
327
  setPrevExpanded(expanded);
@@ -347,10 +336,12 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
347
336
  setPrevTilePadding(tilePadding);
348
337
  }
349
338
  function setMaxHeight() {
350
- if (isExpanded) {
351
- setIsTileMaxHeight(tileContent.current.getBoundingClientRect().height);
339
+ if (isExpanded && tileContent.current) {
340
+ setIsTileMaxHeight(tileContent.current.getBoundingClientRect()?.height);
341
+ }
342
+ if (aboveTheFold.current) {
343
+ setIsTileMaxHeight(aboveTheFold.current.getBoundingClientRect().height);
352
344
  }
353
- setIsTileMaxHeight(aboveTheFold.current.getBoundingClientRect().height);
354
345
  }
355
346
  function handleClick(evt) {
356
347
  evt.persist();
@@ -371,13 +362,13 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
371
362
  [`${prefix}--tile--is-expanded`]: isExpanded,
372
363
  [`${prefix}--tile--light`]: light
373
364
  }, className);
374
- const interactiveClassNames = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--expandable`, `${prefix}--tile--expandable--interactive`, {
375
- [`${prefix}--tile--is-expanded`]: isExpanded,
376
- [`${prefix}--tile--light`]: light
377
- }, className);
365
+ const interactiveClassNames = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--expandable`, `${prefix}--tile--expandable--interactive`, isExpanded && `${prefix}--tile--is-expanded`, light && `${prefix}--tile--light`, className);
378
366
  const chevronInteractiveClassNames = cx__default["default"](`${prefix}--tile__chevron`, `${prefix}--tile__chevron--interactive`);
379
367
  const childrenAsArray = getChildren();
380
368
  useIsomorphicEffect["default"](() => {
369
+ if (!tile.current || !aboveTheFold.current) {
370
+ return;
371
+ }
381
372
  const getStyle = window.getComputedStyle(tile.current, null);
382
373
  const {
383
374
  current: node
@@ -391,6 +382,9 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
391
382
  setIsTilePadding(paddingTop + paddingBottom);
392
383
  }, [isTileMaxHeight]);
393
384
  useIsomorphicEffect["default"](() => {
385
+ if (!aboveTheFold.current || !belowTheFold.current) {
386
+ return;
387
+ }
394
388
  if (!useNoInteractiveChildren.getInteractiveContent(belowTheFold.current)) {
395
389
  setInteractive(false);
396
390
  return;
@@ -399,13 +393,19 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
399
393
  }
400
394
  }, []);
401
395
  useIsomorphicEffect["default"](() => {
396
+ if (!tile.current) {
397
+ return;
398
+ }
402
399
  if (isExpanded) {
403
- tile.current.style.maxHeight = null;
400
+ tile.current.style.maxHeight = '';
404
401
  } else {
405
402
  tile.current.style.maxHeight = isTileMaxHeight + isTilePadding + 'px';
406
403
  }
407
404
  }, [isExpanded, isTileMaxHeight, isTilePadding]);
408
405
  React.useEffect(() => {
406
+ if (!aboveTheFold.current) {
407
+ return;
408
+ }
409
409
  const resizeObserver = new ResizeObserver(entries => {
410
410
  const [aboveTheFold] = entries;
411
411
  setIsTileMaxHeight(aboveTheFold.contentRect.height);
@@ -414,6 +414,7 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
414
414
  return () => resizeObserver.disconnect();
415
415
  }, []);
416
416
  return interactive ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
417
+ // @ts-expect-error: Needlesly strict & deep typing for the element type
417
418
  ref: ref,
418
419
  className: interactiveClassNames,
419
420
  "aria-expanded": isExpanded
@@ -433,7 +434,9 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
433
434
  ref: belowTheFold,
434
435
  className: `${prefix}--tile-content`
435
436
  }, childrenAsArray[1]))) : /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({
436
- type: "button",
437
+ type: "button"
438
+ // @ts-expect-error: Needlesly strict & deep typing for the element type
439
+ ,
437
440
  ref: ref,
438
441
  className: classNames,
439
442
  "aria-expanded": isExpanded,
@@ -455,13 +458,7 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
455
458
  }, childrenAsArray[1])));
456
459
  });
457
460
  ExpandableTile.propTypes = {
458
- /**
459
- * The child nodes.
460
- */
461
461
  children: PropTypes__default["default"].node,
462
- /**
463
- * The CSS class names.
464
- */
465
462
  className: PropTypes__default["default"].string,
466
463
  /**
467
464
  * `true` if the tile is expanded.
@@ -505,15 +502,6 @@ ExpandableTile.propTypes = {
505
502
  */
506
503
  tileExpandedLabel: PropTypes__default["default"].string
507
504
  };
508
- ExpandableTile.defaultProps = {
509
- tabIndex: 0,
510
- expanded: false,
511
- tileMaxHeight: 0,
512
- tilePadding: 0,
513
- onClick: () => {},
514
- tileCollapsedIconText: 'Interact to expand Tile',
515
- tileExpandedIconText: 'Interact to collapse Tile'
516
- };
517
505
  ExpandableTile.displayName = 'ExpandableTile';
518
506
  const TileAboveTheFoldContent = /*#__PURE__*/React__default["default"].forwardRef(function TilAboveTheFoldContent(_ref5, ref) {
519
507
  let {
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export { Tile, type TileProps, ClickableTile, type ClickableTileProps, SelectableTile, type SelectableTileProps, ExpandableTile, type ExpandableTileProps, TileAboveTheFoldContent, type TileAboveTheFoldContentProps, TileBelowTheFoldContent, type TileBelowTheFoldContentProps, } from './Tile';
@@ -4,55 +4,11 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import PropTypes from 'prop-types';
8
7
  import React from 'react';
9
- type ToggleSkeletonProps = {
10
- 'aria-label': string;
11
- /**
12
- * Specify an optional className to add to the form item wrapper.
13
- */
8
+ interface ToggleSkeletonProps {
9
+ 'aria-label'?: string;
14
10
  className?: string;
15
- /**
16
- * Provide an id that unique represents the underlying `<input>`
17
- */
18
- id?: string;
19
- /**
20
- * Provide the text that will be read by a screen reader when visiting this
21
- * control
22
- * `aria-label` is always required but will be null if `labelText` is also
23
- * provided
24
- */
25
- labelText?: string;
26
- /**
27
- * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
28
- */
29
- size?: 'sm' | 'md';
30
- } & React.HTMLAttributes<HTMLDivElement>;
31
- declare class ToggleSkeleton extends React.Component<ToggleSkeletonProps> {
32
- static propTypes: {
33
- "aria-label": PropTypes.Validator<string>;
34
- /**
35
- * Specify an optional className to add to the form item wrapper.
36
- */
37
- className: PropTypes.Requireable<string>;
38
- /**
39
- * Provide an id that unique represents the underlying `<input>`
40
- */
41
- id: PropTypes.Requireable<string>;
42
- /**
43
- * Provide the text that will be read by a screen reader when visiting this
44
- * control
45
- * `aria-label` is always required but will be undefined if `labelText` is also
46
- * provided
47
- */
48
- labelText: PropTypes.Requireable<string>;
49
- /**
50
- * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
51
- */
52
- size: PropTypes.Requireable<string>;
53
- };
54
- static defaultProps: Partial<ToggleSkeletonProps>;
55
- render(): JSX.Element;
56
11
  }
12
+ declare const ToggleSkeleton: React.FC<ToggleSkeletonProps>;
57
13
  export default ToggleSkeleton;
58
14
  export { ToggleSkeleton };
@@ -21,68 +21,28 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
21
21
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
22
22
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
23
23
 
24
- class ToggleSkeleton extends React__default["default"].Component {
25
- render() {
26
- var _div;
27
- const {
28
- id,
29
- labelText,
30
- className,
31
- size,
32
- ...rest
33
- } = this.props;
34
- return /*#__PURE__*/React__default["default"].createElement(usePrefix.PrefixContext.Consumer, null, prefix => {
35
- const toggleInputClassNames = cx__default["default"](`${prefix}--toggle ${prefix}--skeleton`, {
36
- [`${prefix}--toggle-input--small`]: size === 'sm'
37
- });
38
- return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
39
- className: cx__default["default"](`${prefix}--form-item`, className)
40
- }, rest), /*#__PURE__*/React__default["default"].createElement("input", {
41
- type: "checkbox",
42
- id: id,
43
- className: toggleInputClassNames
44
- }), /*#__PURE__*/React__default["default"].createElement("label", {
45
- className: `${prefix}--toggle-input__label`,
46
- htmlFor: id,
47
- "aria-label": labelText ? undefined : this.props['aria-label']
48
- }, labelText ? _div || (_div = /*#__PURE__*/React__default["default"].createElement("div", null, labelText)) : null, /*#__PURE__*/React__default["default"].createElement("span", {
49
- className: `${prefix}--toggle__switch`
50
- }, /*#__PURE__*/React__default["default"].createElement("span", {
51
- className: `${prefix}--toggle__text--left`
52
- }), /*#__PURE__*/React__default["default"].createElement("span", {
53
- className: `${prefix}--toggle__appearance`
54
- }), /*#__PURE__*/React__default["default"].createElement("span", {
55
- className: `${prefix}--toggle__text--right`
56
- }))));
57
- });
58
- }
59
- }
60
- _rollupPluginBabelHelpers.defineProperty(ToggleSkeleton, "propTypes", {
61
- ['aria-label']: PropTypes__default["default"].string.isRequired,
62
- /**
63
- * Specify an optional className to add to the form item wrapper.
64
- */
65
- className: PropTypes__default["default"].string,
66
- /**
67
- * Provide an id that unique represents the underlying `<input>`
68
- */
69
- id: PropTypes__default["default"].string,
70
- /**
71
- * Provide the text that will be read by a screen reader when visiting this
72
- * control
73
- * `aria-label` is always required but will be undefined if `labelText` is also
74
- * provided
75
- */
76
- labelText: PropTypes__default["default"].string,
77
- /**
78
- * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
79
- */
80
- size: PropTypes__default["default"].oneOf(['sm', 'md'])
81
- });
82
- _rollupPluginBabelHelpers.defineProperty(ToggleSkeleton, "defaultProps", {
83
- ['aria-label']: 'Toggle is loading',
84
- size: 'md'
85
- });
24
+ const ToggleSkeleton = _ref => {
25
+ let {
26
+ 'aria-label': ariaLabel = 'Toggle is loading',
27
+ className,
28
+ ...rest
29
+ } = _ref;
30
+ const prefix = usePrefix.usePrefix();
31
+ const skeletonClassNames = cx__default["default"](`${prefix}--toggle ${prefix}--toggle--skeleton`, className);
32
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
33
+ className: skeletonClassNames
34
+ }, rest, {
35
+ "aria-label": ariaLabel
36
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
37
+ className: `${prefix}--toggle__skeleton-circle`
38
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
39
+ className: `${prefix}--toggle__skeleton-rectangle`
40
+ }));
41
+ };
42
+ ToggleSkeleton.propTypes = {
43
+ 'aria-label': PropTypes__default["default"].string,
44
+ className: PropTypes__default["default"].string
45
+ };
86
46
 
87
47
  exports.ToggleSkeleton = ToggleSkeleton;
88
48
  exports["default"] = ToggleSkeleton;
@@ -84,7 +84,7 @@ function Toggle(_ref) {
84
84
  // the keyboard event which already calls handleClick. if we wouldn't catch this, the
85
85
  // onClick and onToggle functions would be called twice whenever the user activates the
86
86
  // toggle by keyboard and props['aria-labelledby'] is passed.
87
- if (buttonElement.current && e.target !== buttonElement.current) {
87
+ if (buttonElement.current && e.target !== buttonElement.current && !disabled) {
88
88
  handleClick(e);
89
89
  buttonElement.current.focus();
90
90
  }
@@ -15,6 +15,7 @@ var React = require('react');
15
15
  var PropTypes = require('prop-types');
16
16
  var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
17
17
  var Button = require('../Button/Button.js');
18
+ require('../Button/Button.Skeleton.js');
18
19
  var usePrefix = require('../../internal/usePrefix.js');
19
20
 
20
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }