@patternfly/react-core 6.0.0-alpha.86 → 6.0.0-alpha.87

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 (163) hide show
  1. package/CHANGELOG.md +10 -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/Content/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/Drawer/package.json +1 -1
  28. package/dist/dynamic/components/Dropdown/package.json +1 -1
  29. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  30. package/dist/dynamic/components/EmptyState/package.json +1 -1
  31. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  32. package/dist/dynamic/components/FileUpload/package.json +1 -1
  33. package/dist/dynamic/components/Form/package.json +1 -1
  34. package/dist/dynamic/components/FormSelect/package.json +1 -1
  35. package/dist/dynamic/components/HelperText/package.json +1 -1
  36. package/dist/dynamic/components/Hint/package.json +1 -1
  37. package/dist/dynamic/components/Icon/package.json +1 -1
  38. package/dist/dynamic/components/InputGroup/package.json +1 -1
  39. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  40. package/dist/dynamic/components/Label/package.json +1 -1
  41. package/dist/dynamic/components/List/package.json +1 -1
  42. package/dist/dynamic/components/LoginPage/package.json +1 -1
  43. package/dist/dynamic/components/Masthead/package.json +1 -1
  44. package/dist/dynamic/components/Menu/package.json +1 -1
  45. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  46. package/dist/dynamic/components/Modal/package.json +1 -1
  47. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  48. package/dist/dynamic/components/Nav/package.json +1 -1
  49. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  50. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  51. package/dist/dynamic/components/NumberInput/package.json +1 -1
  52. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  53. package/dist/dynamic/components/Page/package.json +1 -1
  54. package/dist/dynamic/components/Pagination/package.json +1 -1
  55. package/dist/dynamic/components/Panel/package.json +1 -1
  56. package/dist/dynamic/components/Popover/package.json +1 -1
  57. package/dist/dynamic/components/Progress/package.json +1 -1
  58. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  59. package/dist/dynamic/components/Radio/package.json +1 -1
  60. package/dist/dynamic/components/SearchInput/package.json +1 -1
  61. package/dist/dynamic/components/Select/package.json +1 -1
  62. package/dist/dynamic/components/Sidebar/package.json +1 -1
  63. package/dist/dynamic/components/SimpleList/package.json +1 -1
  64. package/dist/dynamic/components/Skeleton/package.json +1 -1
  65. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  66. package/dist/dynamic/components/Slider/package.json +1 -1
  67. package/dist/dynamic/components/Spinner/package.json +1 -1
  68. package/dist/dynamic/components/Switch/package.json +1 -1
  69. package/dist/dynamic/components/Tabs/package.json +1 -1
  70. package/dist/dynamic/components/TextArea/package.json +1 -1
  71. package/dist/dynamic/components/TextInput/package.json +1 -1
  72. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  73. package/dist/dynamic/components/Tile/package.json +1 -1
  74. package/dist/dynamic/components/TimePicker/package.json +1 -1
  75. package/dist/dynamic/components/Timestamp/package.json +1 -1
  76. package/dist/dynamic/components/Title/package.json +1 -1
  77. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  78. package/dist/dynamic/components/Toolbar/package.json +1 -1
  79. package/dist/dynamic/components/Tooltip/package.json +1 -1
  80. package/dist/dynamic/components/TreeView/package.json +1 -1
  81. package/dist/dynamic/components/Truncate/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/package.json +1 -1
  90. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  91. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  92. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  93. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  94. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  95. package/dist/dynamic/helpers/constants/package.json +1 -1
  96. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  97. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  99. package/dist/dynamic/helpers/package.json +1 -1
  100. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  101. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  103. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  104. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  105. package/dist/dynamic/helpers/util/package.json +1 -1
  106. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  107. package/dist/dynamic/layouts/Flex/package.json +1 -1
  108. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  109. package/dist/dynamic/layouts/Grid/package.json +1 -1
  110. package/dist/dynamic/layouts/Level/package.json +1 -1
  111. package/dist/dynamic/layouts/Split/package.json +1 -1
  112. package/dist/dynamic/layouts/Stack/package.json +1 -1
  113. package/dist/dynamic/styles/package.json +1 -1
  114. package/dist/esm/components/Page/Page.d.ts +2 -0
  115. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  116. package/dist/esm/components/Page/Page.js +2 -2
  117. package/dist/esm/components/Page/Page.js.map +1 -1
  118. package/dist/esm/components/Page/PageGroup.d.ts +3 -1
  119. package/dist/esm/components/Page/PageGroup.d.ts.map +1 -1
  120. package/dist/esm/components/Page/PageGroup.js +2 -2
  121. package/dist/esm/components/Page/PageGroup.js.map +1 -1
  122. package/dist/esm/components/Page/PageSection.d.ts +1 -1
  123. package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
  124. package/dist/esm/components/Wizard/Wizard.d.ts.map +1 -1
  125. package/dist/esm/components/Wizard/Wizard.js +5 -3
  126. package/dist/esm/components/Wizard/Wizard.js.map +1 -1
  127. package/dist/esm/components/Wizard/WizardContext.d.ts.map +1 -1
  128. package/dist/esm/components/Wizard/WizardContext.js +13 -3
  129. package/dist/esm/components/Wizard/WizardContext.js.map +1 -1
  130. package/dist/js/components/Page/Page.d.ts +2 -0
  131. package/dist/js/components/Page/Page.d.ts.map +1 -1
  132. package/dist/js/components/Page/Page.js +2 -2
  133. package/dist/js/components/Page/Page.js.map +1 -1
  134. package/dist/js/components/Page/PageGroup.d.ts +3 -1
  135. package/dist/js/components/Page/PageGroup.d.ts.map +1 -1
  136. package/dist/js/components/Page/PageGroup.js +2 -2
  137. package/dist/js/components/Page/PageGroup.js.map +1 -1
  138. package/dist/js/components/Page/PageSection.d.ts +1 -1
  139. package/dist/js/components/Page/PageSection.d.ts.map +1 -1
  140. package/dist/js/components/Wizard/Wizard.d.ts.map +1 -1
  141. package/dist/js/components/Wizard/Wizard.js +5 -3
  142. package/dist/js/components/Wizard/Wizard.js.map +1 -1
  143. package/dist/js/components/Wizard/WizardContext.d.ts.map +1 -1
  144. package/dist/js/components/Wizard/WizardContext.js +13 -3
  145. package/dist/js/components/Wizard/WizardContext.js.map +1 -1
  146. package/dist/styles/base-no-reset.css +6 -6
  147. package/dist/styles/base.css +8 -8
  148. package/dist/umd/assets/{output-DncgfZci.css → output-InLLAkYl.css} +4496 -4497
  149. package/dist/umd/react-core.min.js +1 -1
  150. package/helpers/package.json +1 -1
  151. package/layouts/package.json +1 -1
  152. package/next/package.json +1 -1
  153. package/package.json +6 -6
  154. package/src/components/Page/Page.tsx +4 -1
  155. package/src/components/Page/PageGroup.tsx +5 -0
  156. package/src/components/Page/PageSection.tsx +1 -1
  157. package/src/components/Page/__tests__/Page.test.tsx +21 -0
  158. package/src/components/Page/__tests__/PageGroup.test.tsx +20 -0
  159. package/src/components/Page/__tests__/PageSection.test.tsx +27 -0
  160. package/src/components/Page/examples/Page.md +2 -2
  161. package/src/components/Page/examples/PageWithOrWithoutFill.tsx +4 -5
  162. package/src/components/Wizard/Wizard.tsx +5 -3
  163. package/src/components/Wizard/WizardContext.tsx +13 -4
@@ -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.0.0-alpha.85","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.0.0-alpha.86","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.0.0-alpha.85","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.0.0-alpha.86","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.0.0-alpha.85","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.0.0-alpha.86","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.0.0-alpha.86",
3
+ "version": "6.0.0-alpha.87",
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",
@@ -47,15 +47,15 @@
47
47
  "clean:exports": "node scripts/cleanDistExports.js"
48
48
  },
49
49
  "dependencies": {
50
- "@patternfly/react-icons": "^6.0.0-alpha.30",
51
- "@patternfly/react-styles": "^6.0.0-alpha.29",
52
- "@patternfly/react-tokens": "^6.0.0-alpha.29",
50
+ "@patternfly/react-icons": "^6.0.0-alpha.31",
51
+ "@patternfly/react-styles": "^6.0.0-alpha.30",
52
+ "@patternfly/react-tokens": "^6.0.0-alpha.30",
53
53
  "focus-trap": "7.5.4",
54
54
  "react-dropzone": "^14.2.3",
55
55
  "tslib": "^2.6.2"
56
56
  },
57
57
  "devDependencies": {
58
- "@patternfly/patternfly": "6.0.0-alpha.187",
58
+ "@patternfly/patternfly": "6.0.0-alpha.190",
59
59
  "case-anything": "^2.1.13",
60
60
  "css": "^3.0.0",
61
61
  "fs-extra": "^11.2.0"
@@ -64,5 +64,5 @@
64
64
  "react": "^17 || ^18",
65
65
  "react-dom": "^17 || ^18"
66
66
  },
67
- "gitHead": "25a8747bbb2bd86419ea3ee470535709f6e7fe26"
67
+ "gitHead": "8e897861592c3ee8b186f6aef3958741073312e7"
68
68
  }
@@ -94,6 +94,8 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
94
94
  groupProps?: PageGroupProps;
95
95
  /** Additional props of the breadcrumb */
96
96
  breadcrumbProps?: PageBreadcrumbProps;
97
+ /** Enables children to fill the available vertical space. Child page sections or groups that should fill should be passed the isFilled property. */
98
+ isContentFilled?: boolean;
97
99
  }
98
100
 
99
101
  export interface PageState {
@@ -249,6 +251,7 @@ class Page extends React.Component<PageProps, PageState> {
249
251
  additionalGroupedContent,
250
252
  groupProps,
251
253
  breadcrumbProps,
254
+ isContentFilled,
252
255
  ...rest
253
256
  } = this.props;
254
257
  const { mobileView, mobileIsSidebarOpen, desktopIsSidebarOpen, width, height } = this.state;
@@ -294,7 +297,7 @@ class Page extends React.Component<PageProps, PageState> {
294
297
  const Component: keyof JSX.IntrinsicElements = mainComponent;
295
298
 
296
299
  const main = (
297
- <div className={css(styles.pageMainContainer)}>
300
+ <div className={css(styles.pageMainContainer, isContentFilled && styles.modifiers.fill)}>
298
301
  <Component
299
302
  ref={this.mainRef}
300
303
  role={role}
@@ -17,6 +17,8 @@ export interface PageGroupProps extends React.HTMLProps<HTMLDivElement> {
17
17
  xl?: 'top' | 'bottom';
18
18
  '2xl'?: 'top' | 'bottom';
19
19
  };
20
+ /** Enables the page group to fill the available vertical space if true, or disable filling if false. */
21
+ isFilled?: boolean;
20
22
  /** Modifier indicating if PageGroup should have a shadow at the top */
21
23
  hasShadowTop?: boolean;
22
24
  /** Modifier indicating if PageGroup should have a shadow at the bottom */
@@ -31,6 +33,7 @@ export const PageGroup = ({
31
33
  className = '',
32
34
  children,
33
35
  stickyOnBreakpoint,
36
+ isFilled,
34
37
  hasShadowTop = false,
35
38
  hasShadowBottom = false,
36
39
  hasOverflowScroll = false,
@@ -52,6 +55,8 @@ export const PageGroup = ({
52
55
  className={css(
53
56
  styles.pageMainGroup,
54
57
  formatBreakpointMods(stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true),
58
+ isFilled === false && styles.modifiers.noFill,
59
+ isFilled === true && styles.modifiers.fill,
55
60
  hasShadowTop && styles.modifiers.shadowTop,
56
61
  hasShadowBottom && styles.modifiers.shadowBottom,
57
62
  hasOverflowScroll && styles.modifiers.overflowScroll,
@@ -27,7 +27,7 @@ export interface PageSectionProps extends React.HTMLProps<HTMLDivElement> {
27
27
  variant?: 'default' | 'secondary';
28
28
  /** Section type variant */
29
29
  type?: 'default' | 'subnav' | 'breadcrumb' | 'tabs' | 'wizard';
30
- /** Enables the page section to fill the available vertical space */
30
+ /** Enables the page section to fill the available vertical space if true, or disable filling if false. */
31
31
  isFilled?: boolean;
32
32
  /** Limits the width of the section */
33
33
  isWidthLimited?: boolean;
@@ -13,6 +13,8 @@ import { PageBreadcrumb } from '../PageBreadcrumb';
13
13
  import { PageGroup } from '../PageGroup';
14
14
  import { Masthead } from '../../Masthead';
15
15
 
16
+ import styles from '@patternfly/react-styles/css/components/Page/page';
17
+
16
18
  const props = {
17
19
  'aria-label': 'Page layout',
18
20
  id: 'PageId',
@@ -352,4 +354,23 @@ describe('Page', () => {
352
354
  expect(screen.getByTestId('page-test-id')).toHaveAttribute('id', props.id);
353
355
  expect(asFragment()).toMatchSnapshot();
354
356
  });
357
+
358
+ test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isContentFilled is not passed`, () => {
359
+ render(<Page {...props} role="main"></Page>);
360
+
361
+ expect(screen.getByRole('main').parentElement).not.toHaveClass(styles.modifiers.fill);
362
+ expect(screen.getByRole('main').parentElement).not.toHaveClass(styles.modifiers.noFill);
363
+ });
364
+
365
+ test(`Renders with ${styles.modifiers.fill} if isContentFilled={true} is passed`, () => {
366
+ render(<Page {...props} role="main" isContentFilled={true}></Page>);
367
+
368
+ expect(screen.getByRole('main').parentElement).toHaveClass(styles.modifiers.fill);
369
+ });
370
+
371
+ test(`Does not render with ${styles.modifiers.noFill} if isContentFilled={false} is passed`, () => {
372
+ render(<Page {...props} role="main" isContentFilled={false}></Page>);
373
+
374
+ expect(screen.getByRole('main').parentElement).not.toHaveClass(styles.modifiers.noFill);
375
+ });
355
376
  });
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import { PageGroup } from '../PageGroup';
4
+ import styles from '@patternfly/react-styles/css/components/Page/page';
4
5
 
5
6
  describe('page group', () => {
6
7
  test('Verify basic render', () => {
@@ -71,4 +72,23 @@ describe('page group', () => {
71
72
 
72
73
  expect(consoleWarning).toHaveBeenCalled();
73
74
  });
75
+
76
+ test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isFilled is not passed`, () => {
77
+ render(<PageGroup>test</PageGroup>);
78
+
79
+ expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.fill);
80
+ expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.noFill);
81
+ });
82
+
83
+ test(`Renders with ${styles.modifiers.fill} if isFilled={true} is passed`, () => {
84
+ render(<PageGroup isFilled={true}>test</PageGroup>);
85
+
86
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.fill);
87
+ });
88
+
89
+ test(`Renders with ${styles.modifiers.noFill} if isFilled={false} is passed`, () => {
90
+ render(<PageGroup isFilled={false}>test</PageGroup>);
91
+
92
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.noFill);
93
+ });
74
94
  });
@@ -153,3 +153,30 @@ test('Does not render with PageBody wrapper when hasBodyWrapper is false', () =>
153
153
 
154
154
  expect(screen.getByText('test')).not.toHaveClass(styles.pageMainBody);
155
155
  });
156
+
157
+ test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isFilled is not passed`, () => {
158
+ render(<PageSection component="main">test</PageSection>);
159
+
160
+ expect(screen.getByRole('main')).not.toHaveClass(styles.modifiers.fill);
161
+ expect(screen.getByRole('main')).not.toHaveClass(styles.modifiers.noFill);
162
+ });
163
+
164
+ test(`Renders with ${styles.modifiers.fill} if isFilled={true} is passed`, () => {
165
+ render(
166
+ <PageSection component="main" isFilled={true}>
167
+ test
168
+ </PageSection>
169
+ );
170
+
171
+ expect(screen.getByRole('main')).toHaveClass(styles.modifiers.fill);
172
+ });
173
+
174
+ test(`Renders with ${styles.modifiers.noFill} if isFilled={false} is passed`, () => {
175
+ render(
176
+ <PageSection component="main" isFilled={false}>
177
+ test
178
+ </PageSection>
179
+ );
180
+
181
+ expect(screen.getByRole('main')).toHaveClass(styles.modifiers.noFill);
182
+ });
@@ -62,9 +62,9 @@ When the `isManagedSidebar` property is true, it manages the sidebar open/close
62
62
 
63
63
  ### Filled page sections
64
64
 
65
- By default, the last page section is "filled", meaning it fills the available vertical space of a page.
65
+ By default, page sections will not expand to fill in the available vertical space in a page.
66
66
 
67
- To change the default behavior, use the `isFilled` property. To make other page sections "filled", set `isFilled` equal to "true". To disable the last page section from being "filled", set `isFilled` equal to "false".
67
+ To change this default behavior, pass `isContentFilled` to the `<Page>` component and `isFilled={true}` to any child `<PageSection>` or `<PageGroup>` component that you want to fill the space. If multiple components are set to fill, then the available space will be split equally between them.
68
68
 
69
69
  ```ts file="./PageWithOrWithoutFill.tsx"
70
70
 
@@ -60,13 +60,12 @@ export const PageWithOrWithoutFill: React.FunctionComponent = () => {
60
60
  );
61
61
 
62
62
  return (
63
- <Page masthead={masthead} sidebar={sidebar}>
63
+ <Page isContentFilled masthead={masthead} sidebar={sidebar}>
64
64
  <PageSection>A default page section</PageSection>
65
- <PageSection isFilled={true}>This section fills the available space.</PageSection>
66
- <PageSection isFilled={false}>
67
- This section is set to not fill the available space, since the last page section is set to fill the available
68
- space by default.
65
+ <PageSection isFilled={true} variant="secondary">
66
+ This section fills the available space.
69
67
  </PageSection>
68
+ <PageSection>A default page section</PageSection>
70
69
  </Page>
71
70
  );
72
71
  };
@@ -92,10 +92,12 @@ export const Wizard = ({
92
92
  }
93
93
  }, [startIndex]);
94
94
 
95
- // When children change, active step index should reset
95
+ // When the number of steps changes and pushes activeStepIndex out of bounds, reset back to startIndex
96
96
  React.useEffect(() => {
97
- setActiveStepIndex(startIndex);
98
- }, [children, startIndex]);
97
+ if (activeStepIndex > initialSteps.length) {
98
+ setActiveStepIndex(startIndex);
99
+ }
100
+ }, [initialSteps, activeStepIndex, startIndex]);
99
101
 
100
102
  const focusMainContentElement = () =>
101
103
  setTimeout(() => {
@@ -74,10 +74,20 @@ export const WizardContextProvider: React.FunctionComponent<WizardContextProvide
74
74
  const [currentSteps, setCurrentSteps] = React.useState<WizardStepType[]>(initialSteps);
75
75
  const [currentFooter, setCurrentFooter] = React.useState<WizardFooterType>();
76
76
 
77
- // Callback to update steps if they change after initial render
77
+ // Callback to update steps if the overall step number changes
78
78
  React.useEffect(() => {
79
- setCurrentSteps(initialSteps);
80
- }, [initialSteps]);
79
+ if (currentSteps.length !== initialSteps.length) {
80
+ const newSteps = initialSteps.map((newStep) => {
81
+ const currentStepMatch = currentSteps.find((step) => step.id === newStep.id);
82
+ // If an existing step has the same id as a new step, carry over props
83
+ if (currentStepMatch) {
84
+ return { ...currentStepMatch, ...newStep };
85
+ }
86
+ return newStep;
87
+ });
88
+ setCurrentSteps(newSteps);
89
+ }
90
+ }, [currentSteps, initialSteps]);
81
91
 
82
92
  // Combined initial and current state steps
83
93
  const steps = React.useMemo(
@@ -130,7 +140,6 @@ export const WizardContextProvider: React.FunctionComponent<WizardContextProvide
130
140
  if (prevStep.id === step.id) {
131
141
  return { ...prevStep, ...step };
132
142
  }
133
-
134
143
  return prevStep;
135
144
  })
136
145
  ),