@patternfly/react-core 6.5.0-prerelease.18 → 6.5.0-prerelease.19

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 (143) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Compass/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hero/package.json +1 -1
  38. package/dist/dynamic/components/Hint/package.json +1 -1
  39. package/dist/dynamic/components/Icon/package.json +1 -1
  40. package/dist/dynamic/components/InputGroup/package.json +1 -1
  41. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  42. package/dist/dynamic/components/Label/package.json +1 -1
  43. package/dist/dynamic/components/List/package.json +1 -1
  44. package/dist/dynamic/components/LoginPage/package.json +1 -1
  45. package/dist/dynamic/components/Masthead/package.json +1 -1
  46. package/dist/dynamic/components/Menu/package.json +1 -1
  47. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  48. package/dist/dynamic/components/Modal/package.json +1 -1
  49. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  50. package/dist/dynamic/components/Nav/package.json +1 -1
  51. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  52. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  53. package/dist/dynamic/components/NumberInput/package.json +1 -1
  54. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  55. package/dist/dynamic/components/Page/package.json +1 -1
  56. package/dist/dynamic/components/Pagination/package.json +1 -1
  57. package/dist/dynamic/components/Panel/package.json +1 -1
  58. package/dist/dynamic/components/Popover/package.json +1 -1
  59. package/dist/dynamic/components/Progress/package.json +1 -1
  60. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  61. package/dist/dynamic/components/Radio/package.json +1 -1
  62. package/dist/dynamic/components/SearchInput/package.json +1 -1
  63. package/dist/dynamic/components/Select/package.json +1 -1
  64. package/dist/dynamic/components/Sidebar/package.json +1 -1
  65. package/dist/dynamic/components/SimpleList/package.json +1 -1
  66. package/dist/dynamic/components/Skeleton/package.json +1 -1
  67. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  68. package/dist/dynamic/components/Slider/package.json +1 -1
  69. package/dist/dynamic/components/Spinner/package.json +1 -1
  70. package/dist/dynamic/components/Switch/package.json +1 -1
  71. package/dist/dynamic/components/Tabs/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  103. package/dist/dynamic/helpers/package.json +1 -1
  104. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  105. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  106. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  107. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  108. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  109. package/dist/dynamic/helpers/util/package.json +1 -1
  110. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  111. package/dist/dynamic/layouts/Flex/package.json +1 -1
  112. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  113. package/dist/dynamic/layouts/Grid/package.json +1 -1
  114. package/dist/dynamic/layouts/Level/package.json +1 -1
  115. package/dist/dynamic/layouts/Split/package.json +1 -1
  116. package/dist/dynamic/layouts/Stack/package.json +1 -1
  117. package/dist/dynamic/styles/package.json +1 -1
  118. package/dist/esm/components/Dropdown/Dropdown.d.ts +6 -0
  119. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  120. package/dist/esm/components/Dropdown/Dropdown.js +5 -2
  121. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  122. package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts +4 -0
  123. package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
  124. package/dist/esm/components/ExpandableSection/ExpandableSection.js +5 -4
  125. package/dist/esm/components/ExpandableSection/ExpandableSection.js.map +1 -1
  126. package/dist/js/components/Dropdown/Dropdown.d.ts +6 -0
  127. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  128. package/dist/js/components/Dropdown/Dropdown.js +5 -2
  129. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  130. package/dist/js/components/ExpandableSection/ExpandableSection.d.ts +4 -0
  131. package/dist/js/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
  132. package/dist/js/components/ExpandableSection/ExpandableSection.js +5 -4
  133. package/dist/js/components/ExpandableSection/ExpandableSection.js.map +1 -1
  134. package/dist/umd/assets/{output-BGyvbQam.css → output-NT2AWNLd.css} +17118 -17118
  135. package/dist/umd/react-core.min.js +1 -1
  136. package/helpers/package.json +1 -1
  137. package/layouts/package.json +1 -1
  138. package/next/package.json +1 -1
  139. package/package.json +2 -2
  140. package/src/components/Dropdown/Dropdown.tsx +15 -1
  141. package/src/components/Dropdown/__tests__/Dropdown.test.tsx +26 -0
  142. package/src/components/ExpandableSection/ExpandableSection.tsx +10 -7
  143. package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +31 -0
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.5.0-prerelease.17","private":true}
1
+ {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.5.0-prerelease.18","private":true}
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.5.0-prerelease.17","private":true}
1
+ {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.5.0-prerelease.18","private":true}
package/next/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.5.0-prerelease.17","private":true}
1
+ {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.5.0-prerelease.18","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.5.0-prerelease.18",
3
+ "version": "6.5.0-prerelease.19",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18 || ^19",
64
64
  "react-dom": "^17 || ^18 || ^19"
65
65
  },
66
- "gitHead": "124de2e5f9fdbf3327b7bba7456c3434dce11870"
66
+ "gitHead": "6e44a0f4716dd7a38a6efc4c75cb0193ea8b4afe"
67
67
  }
@@ -48,6 +48,12 @@ export interface DropdownProps extends MenuProps, OUIAProps {
48
48
  ouiaId?: number | string;
49
49
  /** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
50
50
  ouiaSafe?: boolean;
51
+ /** When applied, wraps dropdown in a container with a data-ouia-component-id.*/
52
+ containerOuiaId?: number | string;
53
+ /** Set the value of data-ouia-safe for the container when containerOuiaId is applied. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
54
+ containerOuiaSafe?: boolean;
55
+ /** Sets the base component to render for the container. Defaults to <span> */
56
+ containerComponent?: React.ReactNode;
51
57
  /** z-index of the dropdown menu */
52
58
  zIndex?: number;
53
59
  /** Additional properties to pass to the Popper */
@@ -86,11 +92,16 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
86
92
  shouldFocusFirstItemOnOpen = false,
87
93
  shouldPreventScrollOnItemFocus = true,
88
94
  focusTimeoutDelay = 0,
95
+ containerOuiaId,
96
+ containerOuiaSafe = true,
97
+ containerComponent = 'span',
89
98
  ...props
90
99
  }: DropdownProps) => {
91
100
  const localMenuRef = useRef<HTMLDivElement>(undefined);
92
101
  const localToggleRef = useRef<HTMLButtonElement>(undefined);
93
102
  const ouiaProps = useOUIAProps(Dropdown.displayName, ouiaId, ouiaSafe);
103
+ const ContainerComponent = containerComponent as any;
104
+ const containerOuiaProps = useOUIAProps('Dropdown container', containerOuiaId, containerOuiaSafe);
94
105
 
95
106
  const menuRef = (innerRef as React.RefObject<HTMLDivElement | null>) || localMenuRef;
96
107
  const toggleRef =
@@ -185,7 +196,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
185
196
  </MenuContent>
186
197
  </Menu>
187
198
  );
188
- return (
199
+
200
+ const popper = (
189
201
  <Popper
190
202
  trigger={typeof toggle === 'function' ? toggle(toggleRef) : toggle.toggleNode}
191
203
  triggerRef={toggleRef}
@@ -196,6 +208,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
196
208
  {...popperProps}
197
209
  />
198
210
  );
211
+
212
+ return containerOuiaId ? <ContainerComponent {...containerOuiaProps}>{popper}</ContainerComponent> : popper;
199
213
  };
200
214
 
201
215
  export const Dropdown = forwardRef((props: DropdownProps, ref: React.Ref<any>) => (
@@ -201,6 +201,32 @@ test('onOpenChange is called when passed and user presses esc key', async () =>
201
201
  expect(onOpenChange).toBeCalledTimes(1);
202
202
  });
203
203
 
204
+ test('applies containerOuiaId to parent element', () => {
205
+ render(
206
+ <Dropdown containerOuiaId="test-dropdown" toggle={(toggleRef) => toggle(toggleRef)}>
207
+ {dropdownChildren}
208
+ </Dropdown>
209
+ );
210
+
211
+ const dropdownToggle = screen.getByRole('button', { name: 'Dropdown' });
212
+ const dropdownParent = dropdownToggle?.parentNode?.parentNode;
213
+ expect(dropdownParent).toHaveAttribute('data-ouia-component-id', 'test-dropdown');
214
+ expect(dropdownParent).toHaveAttribute('data-ouia-component-type', 'PF6/Dropdown container');
215
+ expect(dropdownParent?.tagName).toBe('SPAN');
216
+ });
217
+
218
+ test('Renders with custom container element when containerComponent is passed', () => {
219
+ render(
220
+ <Dropdown containerOuiaId="test-dropdown" containerComponent="div" toggle={(toggleRef) => toggle(toggleRef)}>
221
+ {dropdownChildren}
222
+ </Dropdown>
223
+ );
224
+
225
+ const dropdownToggle = screen.getByRole('button', { name: 'Dropdown' });
226
+ const dropdownParent = dropdownToggle?.parentNode?.parentNode;
227
+ expect(dropdownParent?.tagName).toBe('DIV');
228
+ });
229
+
204
230
  test('match snapshot', () => {
205
231
  const { asFragment } = render(
206
232
  <Dropdown
@@ -62,6 +62,10 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
62
62
  toggleAriaLabel?: string;
63
63
  /** Accessible name via space delimtted list of IDs for the expandable section toggle. */
64
64
  toggleAriaLabelledBy?: string;
65
+ /** Icon shown in toggle when variant is not truncated. */
66
+ toggleIcon?: React.ReactNode;
67
+ /** Whether to show a toggle icon when variant is not truncated. If omitted, it is important to ensure the current state of the ExpandableSection is conveyed, most likely by having dynamic toggle text. */
68
+ hasToggleIcon?: boolean;
65
69
  /** Truncates the expandable content to the specified number of lines when using the
66
70
  * "truncate" variant.
67
71
  */
@@ -211,6 +215,8 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
211
215
  toggleContent,
212
216
  toggleAriaLabel,
213
217
  toggleAriaLabelledBy,
218
+ toggleIcon = <AngleRightIcon />,
219
+ hasToggleIcon = true,
214
220
  children,
215
221
  isExpanded,
216
222
  isDetached,
@@ -267,13 +273,10 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
267
273
  aria-controls={uniqueContentId}
268
274
  id={uniqueToggleId}
269
275
  onClick={(event) => onToggle(event, !propOrStateIsExpanded)}
270
- {...(variant !== ExpandableSectionVariant.truncate && {
271
- icon: (
272
- <span className={css(styles.expandableSectionToggleIcon)}>
273
- <AngleRightIcon />
274
- </span>
275
- )
276
- })}
276
+ {...(variant !== ExpandableSectionVariant.truncate &&
277
+ hasToggleIcon && {
278
+ icon: <span className={css(styles.expandableSectionToggleIcon)}>{toggleIcon}</span>
279
+ })}
277
280
  aria-label={toggleAriaLabel}
278
281
  aria-labelledby={toggleAriaLabelledBy}
279
282
  >
@@ -3,6 +3,7 @@ import userEvent from '@testing-library/user-event';
3
3
 
4
4
  import { ExpandableSection, ExpandableSectionVariant } from '../ExpandableSection';
5
5
  import styles from '@patternfly/react-styles/css/components/ExpandableSection/expandable-section';
6
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
6
7
 
7
8
  const props = { contentId: 'content-id', toggleId: 'toggle-id' };
8
9
 
@@ -271,3 +272,33 @@ test('Renders with div wrapper when toggleWrapper="div"', () => {
271
272
  const toggle = screen.getByRole('button').parentElement;
272
273
  expect(toggle?.tagName).toBe('DIV');
273
274
  });
275
+
276
+ test('Can render custom toggle icon', () => {
277
+ render(<ExpandableSection toggleIcon={<BellIcon data-testid="bell-icon" />}>Test content</ExpandableSection>);
278
+
279
+ expect(screen.getByTestId('bell-icon')).toBeInTheDocument();
280
+ });
281
+
282
+ test('Does not render toggle icon when hasToggleIcon is false', () => {
283
+ render(<ExpandableSection hasToggleIcon={false}>Test content</ExpandableSection>);
284
+
285
+ const button = screen.getByRole('button');
286
+ expect(button.querySelector('.pf-v6-c-expandable-section__toggle-icon')).not.toBeInTheDocument();
287
+ });
288
+
289
+ test('Does not render custom toggle icon when hasToggleIcon is false', () => {
290
+ render(
291
+ <ExpandableSection toggleIcon={<BellIcon data-testid="bell-icon" />} hasToggleIcon={false}>
292
+ Test content
293
+ </ExpandableSection>
294
+ );
295
+
296
+ expect(screen.queryByTestId('bell-icon')).not.toBeInTheDocument();
297
+ });
298
+
299
+ test('Renders toggle icon by default when hasToggleIcon is true', () => {
300
+ render(<ExpandableSection>Test content</ExpandableSection>);
301
+
302
+ const button = screen.getByRole('button');
303
+ expect(button.querySelector('.pf-v6-c-expandable-section__toggle-icon')).toBeInTheDocument();
304
+ });