@patternfly/react-core 6.5.0-prerelease.69 → 6.5.0-prerelease.70

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 (148) 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/SSRSafeIds/SSRSafeIds/package.json +1 -1
  100. package/dist/dynamic/helpers/constants/package.json +1 -1
  101. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useSSRSafeId/package.json +1 -1
  110. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  111. package/dist/dynamic/helpers/util/package.json +1 -1
  112. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  113. package/dist/dynamic/layouts/Flex/package.json +1 -1
  114. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  115. package/dist/dynamic/layouts/Grid/package.json +1 -1
  116. package/dist/dynamic/layouts/Level/package.json +1 -1
  117. package/dist/dynamic/layouts/Split/package.json +1 -1
  118. package/dist/dynamic/layouts/Stack/package.json +1 -1
  119. package/dist/dynamic/styles/package.json +1 -1
  120. package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts +8 -1
  121. package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  122. package/dist/esm/components/CalendarMonth/CalendarMonth.js +2 -2
  123. package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
  124. package/dist/esm/components/Pagination/Pagination.d.ts +7 -1
  125. package/dist/esm/components/Pagination/Pagination.d.ts.map +1 -1
  126. package/dist/esm/components/Pagination/Pagination.js +3 -3
  127. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  128. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts +8 -1
  129. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  130. package/dist/js/components/CalendarMonth/CalendarMonth.js +2 -2
  131. package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
  132. package/dist/js/components/Pagination/Pagination.d.ts +7 -1
  133. package/dist/js/components/Pagination/Pagination.d.ts.map +1 -1
  134. package/dist/js/components/Pagination/Pagination.js +3 -3
  135. package/dist/js/components/Pagination/Pagination.js.map +1 -1
  136. package/dist/umd/assets/{output-DZ3cC0Ec.css → output-DYPjwi6W.css} +21458 -21386
  137. package/dist/umd/react-core.min.js +1 -1
  138. package/helpers/package.json +1 -1
  139. package/layouts/package.json +1 -1
  140. package/next/package.json +1 -1
  141. package/package.json +6 -6
  142. package/src/components/CalendarMonth/CalendarMonth.tsx +9 -1
  143. package/src/components/Pagination/Pagination.tsx +13 -3
  144. package/src/components/Pagination/__tests__/Pagination.test.tsx +21 -0
  145. package/src/components/Pagination/__tests__/__snapshots__/Pagination.test.tsx.snap +42 -42
  146. package/src/components/Pagination/examples/Pagination.md +27 -1
  147. package/src/components/Pagination/examples/PaginationDynamicStickyBottom.tsx +86 -0
  148. package/src/components/Pagination/examples/PaginationDynamicStickyTop.tsx +85 -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.68","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.69","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.68","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.69","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.68","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.69","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.5.0-prerelease.69",
3
+ "version": "6.5.0-prerelease.70",
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",
@@ -46,15 +46,15 @@
46
46
  "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^6.5.0-prerelease.30",
50
- "@patternfly/react-styles": "^6.5.0-prerelease.21",
51
- "@patternfly/react-tokens": "^6.5.0-prerelease.20",
49
+ "@patternfly/react-icons": "^6.5.0-prerelease.31",
50
+ "@patternfly/react-styles": "^6.5.0-prerelease.22",
51
+ "@patternfly/react-tokens": "^6.5.0-prerelease.21",
52
52
  "focus-trap": "7.6.6",
53
53
  "react-dropzone": "^14.3.5",
54
54
  "tslib": "^2.8.1"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "6.5.0-prerelease.78",
57
+ "@patternfly/patternfly": "6.5.0-prerelease.79",
58
58
  "case-anything": "^3.1.2",
59
59
  "css": "^3.0.0",
60
60
  "fs-extra": "^11.3.3"
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18 || ^19",
64
64
  "react-dom": "^17 || ^18 || ^19"
65
65
  },
66
- "gitHead": "b679641cbe5c8fa428a0a9d1b1c4c5bc0b04b6e4"
66
+ "gitHead": "6b93dbd79a250af00d40d88f8e7eeb5553231946"
67
67
  }
@@ -81,6 +81,13 @@ export interface CalendarProps extends CalendarFormat, Omit<React.HTMLProps<HTML
81
81
  onSelectToggle?: (open: boolean) => void;
82
82
  /** Functions that returns if a date is valid and selectable. */
83
83
  validators?: ((date: Date) => boolean)[];
84
+ /** The container to append the month select menu to. Defaults to 'inline'.
85
+ * If your menu is being cut off you can append it to an element higher up the DOM tree.
86
+ * Some examples:
87
+ * monthAppendTo={() => document.body};
88
+ * monthAppendTo={document.getElementById('target')}
89
+ */
90
+ monthAppendTo?: HTMLElement | ((ref?: HTMLElement) => HTMLElement) | 'inline';
84
91
  }
85
92
 
86
93
  const buildCalendar = (year: number, month: number, weekStart: number, validators: ((date: Date) => boolean)[]) => {
@@ -143,6 +150,7 @@ export const CalendarMonth = ({
143
150
  cellAriaLabel,
144
151
  isDateFocused = false,
145
152
  inlineProps,
153
+ monthAppendTo = 'inline',
146
154
  ...props
147
155
  }: CalendarProps) => {
148
156
  const longMonths = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
@@ -327,7 +335,7 @@ export const CalendarMonth = ({
327
335
  onMonthChange(ev, newDate);
328
336
  }}
329
337
  selected={monthFormatted}
330
- popperProps={{ appendTo: 'inline' }}
338
+ popperProps={{ appendTo: monthAppendTo }}
331
339
  >
332
340
  <SelectList>
333
341
  {longMonths.map((longMonth, index) => (
@@ -125,8 +125,14 @@ export interface PaginationProps extends React.HTMLProps<HTMLDivElement>, OUIAPr
125
125
  isCompact?: boolean;
126
126
  /** Flag indicating if pagination should not be sticky on mobile. */
127
127
  isStatic?: boolean;
128
- /** Flag indicating if pagination should stick to its position (based on variant). */
128
+ /** Flag indicating if pagination should stick to its position (based on variant). For dynamic sticky control, use isStickyBase
129
+ * and isStickyStuck instead.
130
+ */
129
131
  isSticky?: boolean;
132
+ /** @beta Flag indicating the pagination should have sticky positioning relative to its container. */
133
+ isStickyBase?: boolean;
134
+ /** @beta Flag indicating the pagination should have stuck styling, when the pagination is not at the top (for top variant) or bottom (for bottom variant) of the scroll container. */
135
+ isStickyStuck?: boolean;
130
136
  /** Total number of items. */
131
137
  itemCount?: number;
132
138
  /** Last index of items on current page. */
@@ -191,8 +197,10 @@ export const Pagination: React.FunctionComponent<PaginationProps> = ({
191
197
  variant = PaginationVariant.top,
192
198
  isDisabled = false,
193
199
  isCompact = false,
194
- isSticky = false,
195
200
  isStatic = false,
201
+ isSticky = false,
202
+ isStickyBase = false,
203
+ isStickyStuck = false,
196
204
  dropDirection: dropDirectionProp,
197
205
  toggleTemplate,
198
206
  perPage = defaultPerPageOptions[0].value,
@@ -290,7 +298,9 @@ export const Pagination: React.FunctionComponent<PaginationProps> = ({
290
298
  usePageInsets && styles.modifiers.pageInsets,
291
299
  formatBreakpointMods(inset, styles),
292
300
  isStatic && styles.modifiers.static,
293
- isSticky && styles.modifiers.sticky,
301
+ isSticky && !isStickyBase && !isStickyStuck && styles.modifiers.sticky,
302
+ isStickyBase && styles.modifiers.stickyBase,
303
+ isStickyStuck && styles.modifiers.stickyStuck,
294
304
  className
295
305
  )}
296
306
  {...(widgetId && { id: `${widgetId}-${variant}-pagination` })}
@@ -3,6 +3,7 @@ import userEvent from '@testing-library/user-event';
3
3
 
4
4
  import { Pagination, PaginationVariant } from '../index';
5
5
  import { KeyTypes } from '../../../helpers';
6
+ import styles from '@patternfly/react-styles/css/components/Pagination/pagination';
6
7
 
7
8
  describe('Pagination', () => {
8
9
  describe('component render', () => {
@@ -117,6 +118,26 @@ describe('Pagination', () => {
117
118
  render(<Pagination data-testid="pagination-insets" usePageInsets />);
118
119
  expect(screen.getByTestId('pagination-insets')).toHaveClass('pf-m-page-insets');
119
120
  });
121
+
122
+ test(`should not render ${styles.modifiers.stickyBase} class by default`, () => {
123
+ render(<Pagination data-testid="pagination-sticky-base-default" itemCount={20} />);
124
+ expect(screen.getByTestId('pagination-sticky-base-default')).not.toHaveClass(styles.modifiers.stickyBase);
125
+ });
126
+
127
+ test(`should render ${styles.modifiers.stickyBase} class when isStickyBase is true`, () => {
128
+ render(<Pagination data-testid="pagination-sticky-base" itemCount={20} isStickyBase />);
129
+ expect(screen.getByTestId('pagination-sticky-base')).toHaveClass(styles.modifiers.stickyBase);
130
+ });
131
+
132
+ test(`should not render ${styles.modifiers.stickyStuck} class by default`, () => {
133
+ render(<Pagination data-testid="pagination-sticky-stuck-default" itemCount={20} />);
134
+ expect(screen.getByTestId('pagination-sticky-stuck-default')).not.toHaveClass(styles.modifiers.stickyStuck);
135
+ });
136
+
137
+ test(`should render ${styles.modifiers.stickyStuck} class when isStickyStuck is true`, () => {
138
+ render(<Pagination data-testid="pagination-sticky-stuck" itemCount={20} isStickyStuck />);
139
+ expect(screen.getByTestId('pagination-sticky-stuck')).toHaveClass(styles.modifiers.stickyStuck);
140
+ });
120
141
  });
121
142
 
122
143
  describe('API', () => {
@@ -4,7 +4,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
4
4
  <DocumentFragment>
5
5
  <div
6
6
  class="pf-v6-c-pagination pf-m-inset-2xl pf-m-inset-2xl-on-sm pf-m-inset-2xl-on-md pf-m-inset-2xl-on-lg pf-m-inset-2xl-on-xl pf-m-inset-2xl-on-2xl"
7
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rcm:"
7
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rdq:"
8
8
  data-ouia-component-type="PF6/Pagination"
9
9
  data-ouia-safe="true"
10
10
  id="options-menu-top-pagination"
@@ -29,7 +29,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
29
29
  aria-expanded="false"
30
30
  aria-haspopup="listbox"
31
31
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
32
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rco:"
32
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rds:"
33
33
  data-ouia-component-type="PF6/MenuToggle"
34
34
  data-ouia-safe="true"
35
35
  id="options-menu-top-toggle"
@@ -93,7 +93,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
93
93
  aria-label="Go to first page"
94
94
  class="pf-v6-c-button pf-m-plain"
95
95
  data-action="first"
96
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcp:"
96
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdt:"
97
97
  data-ouia-component-type="PF6/Button"
98
98
  data-ouia-safe="true"
99
99
  disabled=""
@@ -137,7 +137,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
137
137
  aria-label="Go to previous page"
138
138
  class="pf-v6-c-button pf-m-plain"
139
139
  data-action="previous"
140
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcq:"
140
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdu:"
141
141
  data-ouia-component-type="PF6/Button"
142
142
  data-ouia-safe="true"
143
143
  disabled=""
@@ -183,7 +183,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
183
183
  <input
184
184
  aria-invalid="false"
185
185
  aria-label="Current page"
186
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rcs:"
186
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:re0:"
187
187
  data-ouia-component-type="PF6/TextInput"
188
188
  data-ouia-safe="true"
189
189
  max="2"
@@ -200,7 +200,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
200
200
  aria-label="Go to next page"
201
201
  class="pf-v6-c-button pf-m-plain"
202
202
  data-action="next"
203
- data-ouia-component-id="OUIA-Generated-Button-plain-:rct:"
203
+ data-ouia-component-id="OUIA-Generated-Button-plain-:re1:"
204
204
  data-ouia-component-type="PF6/Button"
205
205
  data-ouia-safe="true"
206
206
  type="button"
@@ -243,7 +243,7 @@ exports[`Pagination API verify inset2xl inset breakpoints 1`] = `
243
243
  aria-label="Go to last page"
244
244
  class="pf-v6-c-button pf-m-plain"
245
245
  data-action="last"
246
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcu:"
246
+ data-ouia-component-id="OUIA-Generated-Button-plain-:re2:"
247
247
  data-ouia-component-type="PF6/Button"
248
248
  data-ouia-safe="true"
249
249
  type="button"
@@ -289,7 +289,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
289
289
  <DocumentFragment>
290
290
  <div
291
291
  class="pf-v6-c-pagination pf-m-inset-lg pf-m-inset-lg-on-sm pf-m-inset-lg-on-md pf-m-inset-lg-on-lg pf-m-inset-lg-on-xl pf-m-inset-lg-on-2xl"
292
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rc4:"
292
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rd8:"
293
293
  data-ouia-component-type="PF6/Pagination"
294
294
  data-ouia-safe="true"
295
295
  id="options-menu-top-pagination"
@@ -314,7 +314,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
314
314
  aria-expanded="false"
315
315
  aria-haspopup="listbox"
316
316
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
317
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rc6:"
317
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rda:"
318
318
  data-ouia-component-type="PF6/MenuToggle"
319
319
  data-ouia-safe="true"
320
320
  id="options-menu-top-toggle"
@@ -378,7 +378,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
378
378
  aria-label="Go to first page"
379
379
  class="pf-v6-c-button pf-m-plain"
380
380
  data-action="first"
381
- data-ouia-component-id="OUIA-Generated-Button-plain-:rc7:"
381
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdb:"
382
382
  data-ouia-component-type="PF6/Button"
383
383
  data-ouia-safe="true"
384
384
  disabled=""
@@ -422,7 +422,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
422
422
  aria-label="Go to previous page"
423
423
  class="pf-v6-c-button pf-m-plain"
424
424
  data-action="previous"
425
- data-ouia-component-id="OUIA-Generated-Button-plain-:rc8:"
425
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdc:"
426
426
  data-ouia-component-type="PF6/Button"
427
427
  data-ouia-safe="true"
428
428
  disabled=""
@@ -468,7 +468,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
468
468
  <input
469
469
  aria-invalid="false"
470
470
  aria-label="Current page"
471
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rca:"
471
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:rde:"
472
472
  data-ouia-component-type="PF6/TextInput"
473
473
  data-ouia-safe="true"
474
474
  max="2"
@@ -485,7 +485,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
485
485
  aria-label="Go to next page"
486
486
  class="pf-v6-c-button pf-m-plain"
487
487
  data-action="next"
488
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcb:"
488
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdf:"
489
489
  data-ouia-component-type="PF6/Button"
490
490
  data-ouia-safe="true"
491
491
  type="button"
@@ -528,7 +528,7 @@ exports[`Pagination API verify insetLg inset breakpoints 1`] = `
528
528
  aria-label="Go to last page"
529
529
  class="pf-v6-c-button pf-m-plain"
530
530
  data-action="last"
531
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcc:"
531
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdg:"
532
532
  data-ouia-component-type="PF6/Button"
533
533
  data-ouia-safe="true"
534
534
  type="button"
@@ -574,7 +574,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
574
574
  <DocumentFragment>
575
575
  <div
576
576
  class="pf-v6-c-pagination pf-m-inset-md pf-m-inset-md-on-sm pf-m-inset-md-on-md pf-m-inset-md-on-lg pf-m-inset-md-on-xl pf-m-inset-md-on-2xl"
577
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rbr:"
577
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rcv:"
578
578
  data-ouia-component-type="PF6/Pagination"
579
579
  data-ouia-safe="true"
580
580
  id="options-menu-top-pagination"
@@ -599,7 +599,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
599
599
  aria-expanded="false"
600
600
  aria-haspopup="listbox"
601
601
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
602
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rbt:"
602
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rd1:"
603
603
  data-ouia-component-type="PF6/MenuToggle"
604
604
  data-ouia-safe="true"
605
605
  id="options-menu-top-toggle"
@@ -663,7 +663,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
663
663
  aria-label="Go to first page"
664
664
  class="pf-v6-c-button pf-m-plain"
665
665
  data-action="first"
666
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbu:"
666
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rd2:"
667
667
  data-ouia-component-type="PF6/Button"
668
668
  data-ouia-safe="true"
669
669
  disabled=""
@@ -707,7 +707,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
707
707
  aria-label="Go to previous page"
708
708
  class="pf-v6-c-button pf-m-plain"
709
709
  data-action="previous"
710
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbv:"
710
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rd3:"
711
711
  data-ouia-component-type="PF6/Button"
712
712
  data-ouia-safe="true"
713
713
  disabled=""
@@ -753,7 +753,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
753
753
  <input
754
754
  aria-invalid="false"
755
755
  aria-label="Current page"
756
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rc1:"
756
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:rd5:"
757
757
  data-ouia-component-type="PF6/TextInput"
758
758
  data-ouia-safe="true"
759
759
  max="2"
@@ -770,7 +770,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
770
770
  aria-label="Go to next page"
771
771
  class="pf-v6-c-button pf-m-plain"
772
772
  data-action="next"
773
- data-ouia-component-id="OUIA-Generated-Button-plain-:rc2:"
773
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rd6:"
774
774
  data-ouia-component-type="PF6/Button"
775
775
  data-ouia-safe="true"
776
776
  type="button"
@@ -813,7 +813,7 @@ exports[`Pagination API verify insetMd inset breakpoints 1`] = `
813
813
  aria-label="Go to last page"
814
814
  class="pf-v6-c-button pf-m-plain"
815
815
  data-action="last"
816
- data-ouia-component-id="OUIA-Generated-Button-plain-:rc3:"
816
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rd7:"
817
817
  data-ouia-component-type="PF6/Button"
818
818
  data-ouia-safe="true"
819
819
  type="button"
@@ -859,7 +859,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
859
859
  <DocumentFragment>
860
860
  <div
861
861
  class="pf-v6-c-pagination pf-m-inset-none pf-m-inset-none-on-sm pf-m-inset-none-on-md pf-m-inset-none-on-lg pf-m-inset-none-on-xl pf-m-inset-none-on-2xl"
862
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rb9:"
862
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rcd:"
863
863
  data-ouia-component-type="PF6/Pagination"
864
864
  data-ouia-safe="true"
865
865
  id="options-menu-top-pagination"
@@ -884,7 +884,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
884
884
  aria-expanded="false"
885
885
  aria-haspopup="listbox"
886
886
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
887
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rbb:"
887
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rcf:"
888
888
  data-ouia-component-type="PF6/MenuToggle"
889
889
  data-ouia-safe="true"
890
890
  id="options-menu-top-toggle"
@@ -948,7 +948,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
948
948
  aria-label="Go to first page"
949
949
  class="pf-v6-c-button pf-m-plain"
950
950
  data-action="first"
951
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbc:"
951
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rcg:"
952
952
  data-ouia-component-type="PF6/Button"
953
953
  data-ouia-safe="true"
954
954
  disabled=""
@@ -992,7 +992,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
992
992
  aria-label="Go to previous page"
993
993
  class="pf-v6-c-button pf-m-plain"
994
994
  data-action="previous"
995
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbd:"
995
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rch:"
996
996
  data-ouia-component-type="PF6/Button"
997
997
  data-ouia-safe="true"
998
998
  disabled=""
@@ -1038,7 +1038,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
1038
1038
  <input
1039
1039
  aria-invalid="false"
1040
1040
  aria-label="Current page"
1041
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rbf:"
1041
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:rcj:"
1042
1042
  data-ouia-component-type="PF6/TextInput"
1043
1043
  data-ouia-safe="true"
1044
1044
  max="2"
@@ -1055,7 +1055,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
1055
1055
  aria-label="Go to next page"
1056
1056
  class="pf-v6-c-button pf-m-plain"
1057
1057
  data-action="next"
1058
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbg:"
1058
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rck:"
1059
1059
  data-ouia-component-type="PF6/Button"
1060
1060
  data-ouia-safe="true"
1061
1061
  type="button"
@@ -1098,7 +1098,7 @@ exports[`Pagination API verify insetNone inset breakpoints 1`] = `
1098
1098
  aria-label="Go to last page"
1099
1099
  class="pf-v6-c-button pf-m-plain"
1100
1100
  data-action="last"
1101
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbh:"
1101
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rcl:"
1102
1102
  data-ouia-component-type="PF6/Button"
1103
1103
  data-ouia-safe="true"
1104
1104
  type="button"
@@ -1144,7 +1144,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1144
1144
  <DocumentFragment>
1145
1145
  <div
1146
1146
  class="pf-v6-c-pagination pf-m-inset-sm pf-m-inset-sm-on-sm pf-m-inset-sm-on-md pf-m-inset-sm-on-lg pf-m-inset-sm-on-xl pf-m-inset-sm-on-2xl"
1147
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rbi:"
1147
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rcm:"
1148
1148
  data-ouia-component-type="PF6/Pagination"
1149
1149
  data-ouia-safe="true"
1150
1150
  id="options-menu-top-pagination"
@@ -1169,7 +1169,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1169
1169
  aria-expanded="false"
1170
1170
  aria-haspopup="listbox"
1171
1171
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
1172
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rbk:"
1172
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rco:"
1173
1173
  data-ouia-component-type="PF6/MenuToggle"
1174
1174
  data-ouia-safe="true"
1175
1175
  id="options-menu-top-toggle"
@@ -1233,7 +1233,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1233
1233
  aria-label="Go to first page"
1234
1234
  class="pf-v6-c-button pf-m-plain"
1235
1235
  data-action="first"
1236
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbl:"
1236
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rcp:"
1237
1237
  data-ouia-component-type="PF6/Button"
1238
1238
  data-ouia-safe="true"
1239
1239
  disabled=""
@@ -1277,7 +1277,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1277
1277
  aria-label="Go to previous page"
1278
1278
  class="pf-v6-c-button pf-m-plain"
1279
1279
  data-action="previous"
1280
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbm:"
1280
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rcq:"
1281
1281
  data-ouia-component-type="PF6/Button"
1282
1282
  data-ouia-safe="true"
1283
1283
  disabled=""
@@ -1323,7 +1323,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1323
1323
  <input
1324
1324
  aria-invalid="false"
1325
1325
  aria-label="Current page"
1326
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rbo:"
1326
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:rcs:"
1327
1327
  data-ouia-component-type="PF6/TextInput"
1328
1328
  data-ouia-safe="true"
1329
1329
  max="2"
@@ -1340,7 +1340,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1340
1340
  aria-label="Go to next page"
1341
1341
  class="pf-v6-c-button pf-m-plain"
1342
1342
  data-action="next"
1343
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbp:"
1343
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rct:"
1344
1344
  data-ouia-component-type="PF6/Button"
1345
1345
  data-ouia-safe="true"
1346
1346
  type="button"
@@ -1383,7 +1383,7 @@ exports[`Pagination API verify insetSm inset breakpoints 1`] = `
1383
1383
  aria-label="Go to last page"
1384
1384
  class="pf-v6-c-button pf-m-plain"
1385
1385
  data-action="last"
1386
- data-ouia-component-id="OUIA-Generated-Button-plain-:rbq:"
1386
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rcu:"
1387
1387
  data-ouia-component-type="PF6/Button"
1388
1388
  data-ouia-safe="true"
1389
1389
  type="button"
@@ -1429,7 +1429,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1429
1429
  <DocumentFragment>
1430
1430
  <div
1431
1431
  class="pf-v6-c-pagination pf-m-inset-xl pf-m-inset-xl-on-sm pf-m-inset-xl-on-md pf-m-inset-xl-on-lg pf-m-inset-xl-on-xl pf-m-inset-xl-on-2xl"
1432
- data-ouia-component-id="OUIA-Generated-Pagination-top-:rcd:"
1432
+ data-ouia-component-id="OUIA-Generated-Pagination-top-:rdh:"
1433
1433
  data-ouia-component-type="PF6/Pagination"
1434
1434
  data-ouia-safe="true"
1435
1435
  id="options-menu-top-pagination"
@@ -1454,7 +1454,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1454
1454
  aria-expanded="false"
1455
1455
  aria-haspopup="listbox"
1456
1456
  class="pf-v6-c-menu-toggle pf-m-plain pf-m-text"
1457
- data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rcf:"
1457
+ data-ouia-component-id="OUIA-Generated-MenuToggle-plainText-:rdj:"
1458
1458
  data-ouia-component-type="PF6/MenuToggle"
1459
1459
  data-ouia-safe="true"
1460
1460
  id="options-menu-top-toggle"
@@ -1518,7 +1518,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1518
1518
  aria-label="Go to first page"
1519
1519
  class="pf-v6-c-button pf-m-plain"
1520
1520
  data-action="first"
1521
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcg:"
1521
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdk:"
1522
1522
  data-ouia-component-type="PF6/Button"
1523
1523
  data-ouia-safe="true"
1524
1524
  disabled=""
@@ -1562,7 +1562,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1562
1562
  aria-label="Go to previous page"
1563
1563
  class="pf-v6-c-button pf-m-plain"
1564
1564
  data-action="previous"
1565
- data-ouia-component-id="OUIA-Generated-Button-plain-:rch:"
1565
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdl:"
1566
1566
  data-ouia-component-type="PF6/Button"
1567
1567
  data-ouia-safe="true"
1568
1568
  disabled=""
@@ -1608,7 +1608,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1608
1608
  <input
1609
1609
  aria-invalid="false"
1610
1610
  aria-label="Current page"
1611
- data-ouia-component-id="OUIA-Generated-TextInputBase-:rcj:"
1611
+ data-ouia-component-id="OUIA-Generated-TextInputBase-:rdn:"
1612
1612
  data-ouia-component-type="PF6/TextInput"
1613
1613
  data-ouia-safe="true"
1614
1614
  max="2"
@@ -1625,7 +1625,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1625
1625
  aria-label="Go to next page"
1626
1626
  class="pf-v6-c-button pf-m-plain"
1627
1627
  data-action="next"
1628
- data-ouia-component-id="OUIA-Generated-Button-plain-:rck:"
1628
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdo:"
1629
1629
  data-ouia-component-type="PF6/Button"
1630
1630
  data-ouia-safe="true"
1631
1631
  type="button"
@@ -1668,7 +1668,7 @@ exports[`Pagination API verify insetXl inset breakpoints 1`] = `
1668
1668
  aria-label="Go to last page"
1669
1669
  class="pf-v6-c-button pf-m-plain"
1670
1670
  data-action="last"
1671
- data-ouia-component-id="OUIA-Generated-Button-plain-:rcl:"
1671
+ data-ouia-component-id="OUIA-Generated-Button-plain-:rdp:"
1672
1672
  data-ouia-component-type="PF6/Button"
1673
1673
  data-ouia-safe="true"
1674
1674
  type="button"
@@ -6,18 +6,20 @@ propComponents: ['Pagination', PaginationTitles, PerPageOptions, PaginationToggl
6
6
  ouia: true
7
7
  ---
8
8
 
9
- import { Fragment, useState } from 'react';
9
+ import { Fragment, useState, useRef, useLayoutEffect } from 'react';
10
10
 
11
11
  ## Examples
12
12
 
13
13
  ### Top
14
14
 
15
15
  ```ts file="./PaginationTop.tsx"
16
+
16
17
  ```
17
18
 
18
19
  ### Bottom
19
20
 
20
21
  ```ts file="./PaginationBottom.tsx"
22
+
21
23
  ```
22
24
 
23
25
  ### Indeterminate
@@ -25,39 +27,63 @@ import { Fragment, useState } from 'react';
25
27
  By not passing `itemCount` and passing `toggleTemplate` you can customize the toggle with text.
26
28
 
27
29
  ```ts file="./PaginationIndeterminate.tsx"
30
+
28
31
  ```
29
32
 
30
33
  ### Disabled
31
34
 
32
35
  ```ts file="./PaginationDisabled.tsx"
36
+
33
37
  ```
34
38
 
35
39
  ### No items
36
40
 
37
41
  ```ts file="./PaginationNoItems.tsx"
42
+
38
43
  ```
39
44
 
40
45
  ### One page
41
46
 
42
47
  ```ts file="./PaginationOnePage.tsx"
48
+
43
49
  ```
44
50
 
45
51
  ### Compact
46
52
 
47
53
  ```ts file="./PaginationCompact.tsx"
54
+
48
55
  ```
49
56
 
50
57
  ### Offset
51
58
 
52
59
  ```ts file="./PaginationOffset.tsx"
60
+
53
61
  ```
54
62
 
55
63
  ### Sticky
56
64
 
57
65
  ```ts isFullscreen file="./PaginationSticky.tsx"
66
+
67
+ ```
68
+
69
+ ### Dynamic sticky top
70
+
71
+ Pagination can be made sticky via two properties: `isStickyBase`, which allows separate control of the sticky position, and `isStickyStuck`, which applies the sticky styling. In this example, `isStickyStuck` is only applied when the pagination is not at the top of the scroll parent container.
72
+
73
+ ```ts isFullscreen file="./PaginationDynamicStickyTop.tsx"
74
+
75
+ ```
76
+
77
+ ### Dynamic sticky bottom
78
+
79
+ Bottom pagination can be made sticky via two properties: `isStickyBase`, which allows separate control of the sticky position, and `isStickyStuck`, which applies the sticky styling. In this example, `isStickyStuck` is only applied when the pagination is not at the bottom of the scroll parent container.
80
+
81
+ ```ts isFullscreen file="./PaginationDynamicStickyBottom.tsx"
82
+
58
83
  ```
59
84
 
60
85
  ### Inset
61
86
 
62
87
  ```ts file="./PaginationInset.tsx"
88
+
63
89
  ```